2011-05-25 44 views
19

我在使用@Valid參數到我的@Controller上的處理程序方法時遇到問題。我的代碼如下所示:如何在Spring MVC的@RequestBody參數中使用@Valid?

@RequestMapping(value=BIBBLE_BOBBLE_URI_PATTERN + "/widgets", method=RequestMethod.POST) 
@ResponseBody 
@ResponseStatus(HttpStatus.CREATED) 
public Widget saveNewWidget(
     @PathVariable final String username, 
     @PathVariable final String bibbleBobbleName, 
     @Valid @RequestBody final Widget widget, 
     final BindingResult results, 
     final HttpServletRequest request, 
     final HttpServletResponse response) 

其中Widget是類我的域對象之一。我使用@RequestBody註釋來表明請求的有效載荷映射到widget(在我的測試中,請求是JSON,雖然Jackson在我的類路徑中,所以我也可以使用XML)。

正如你所看到的,BindingResult參數Widget參數之後直接跟隨,但我得到了以下錯誤:

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature! 

我如何申請的@Valid標註爲@RequestBody參數,然後得到的結果?

P.S.我使用annotation-driven來處理控制器的接線,做內容協商等。

+0

我正在學習所有這些,但**,嘗試命名屬性'@ModelAttribute(「xyz」)Widget Widget'。 – 2011-06-07 09:25:36

+0

@DecaniBass是否會解決它對我在@ craftsman的回答中提到的任何數據都沒有約束的問題? – 2011-06-07 09:47:54

+0

我知道它是一箇舊的POST,但是它爲你工作?我使用的是Spring 3.2。綁定工作,但不是@Valid。這裏發佈的問題[http://stackoverflow.com/q/16174990/668650] – 2013-04-23 17:01:09

回答

9

您是否使用Spring 3.1?它是Spring 3.1版中的新增功能。請參閱Validation For @RequestBody Method Arguments

+0

這的確是個好消息,但是我被卡在3.0.5至少直到3.1決賽。儘管如此,感謝指針。 – 2011-06-21 10:37:00

+0

3.1是最終/釋放/在野外現在。 :) – finneycanhelp 2012-01-24 13:01:02

+3

我在3.1試過這個,我仍然得到這個問題。 – finneycanhelp 2012-01-25 12:20:25

2

這是3.0版本的問題,它固定在3.1M2。

https://jira.springsource.org/browse/SPR-6709

如果您使用的彈簧3.0的基礎上,一些線程和廣泛的閱讀,這裏是這個問題最好的辦法。面向方面的方法,以便我們在將其升級到解決此問題的spring版本時退出。

截取對使用@RequestMapping註解的方法的調用以及對其上有@Valid註解的每個參數調用方面中的相應驗證器。

相關問題