2012-02-21

Spring MVC @PathVariable 最後一個點(dot)以後的字串(或說副檔名)被切掉了!

使用以下的 @PathVariable,當 key 值為 abc 或 123 時都沒有問題。
@RequestMapping(value = "/release/{key}", method = RequestMethod.GET)
public @ResponseBody
String release(@PathVariable String key) {
    log.debug("取得key值 {}", key);
    return release;
}
但是當 key 值有「.」時就會出錯,比如說「/release/a.b.c」,到了 @PathVariable 就只剩下「a.b」,「.c」不見了,原因出現 Spring MVC 預設會切掉最後一個點以後的字串,應該是在處理「*.do」這樣的 Url pattern 的關係。

解決方式:在 @PathVariable 裡使用 Regular Expression 來設定 key 值的長相。
@RequestMapping(value = "/release/{key:[a-zA-Z0-9\\.]+}", method = RequestMethod.GET)
public @ResponseBody
String release(@PathVariable String key) {
    log.debug("取得key值 {}", key);
    return release;
}
這樣就沒問題了。

沒有留言:

張貼留言