2011-07-12 52 views
2

我在想,如果我可以自定義我的網址進入控制器接受空值Spring MVC的網址模式

@RequestMapping(
      value = "foo/{y}/{x}", 
      method = RequestMethod.GET) 
    public ModelAndView doSmth(@PathVariable(value = "x") String x, 
           @PathVariable(value = "y") String y) { 
} 

在這裏,在我的情況下,X,Y可以爲空字符串。 我怎麼能管理這樣的smth讓這個方法在控制器上處理這個url?

+0

X和Y的所有組合是什麼?是否有可能將它分解爲許多方法 - 預處理變量並在一些常用的私有方法中執行邏輯? – Random

+0

順便說一句:http://stackoverflow.com/questions/5879666/requestmapping-controlers-and-dynamic-urls – Random

回答

1

如果您想支持可選值,則路徑變量不太適合。請求參數(使用@RequestParam)是一個更好的主意,因爲它們可以使用required屬性輕鬆支持可選值。

如果你真的想支持可選的路徑變量,那麼你就需要重載你的映射,即

@RequestMapping(value = "foo/{y}/{x}") 
public ModelAndView doSmth(@PathVariable(value = "x") String x, @PathVariable(value = "y") String y) 

@RequestMapping(value = "foo/{y}") 
public ModelAndView doSmth(@PathVariable(value = "y") String y) 

@RequestMapping(value = "foo") 
public ModelAndView doSmth() 
+0

事情是這個url包含可能包含空字符串不可爲空的字段。如果我遵循這種方法,我將需要編寫許多重載方法。我需要避免這個! – Echo

+0

@Echo:是的,這就是爲什麼我只是說用'@ RequestParam'來代替。 – skaffman

+0

我想用@RequestMapping來支持它 /foo/$ {x}/[#if x?has_content] $ {y} [#else]我可以做些什麼來傳遞空字符串[/#if] – Echo

1

我不認爲,這是一個很好的URL。用戶可能非常困惑。

你爲什麼不試試這個?

@RequestMapping("foo/x/{x}/y/{y}") 
public ModelAndView doSmth(@PathVariable String x, @PathVariable String y) 
+0

謝謝。我沒有嘗試過,因爲我已經使用了另一種方法,但是我們的解決方案很有趣。 – Echo