我使用JSR 303 @Valid
來驗證控制器中的多個請求參數,這些參數與MultipartFile
一起發佈。Spring 3.2驗證請求參數,ControllerAdvice不格式化響應
這驗證部分似乎是工作,
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody
Response upload(@RequestParam(value = "file", required = true) MultipartFile file,
@Valid ValidBean bean) {
//method
}
ValidBean
是一個字符串,長材和一個List<String>
的集合。
public class ValidBean{
@NotNull
String someString;
@Size(min = 1, max=10)
String anotherString;
//getters, setters, random been goodness
}
看來,如果張貼PARAMS不匹配什麼是ValidBean
定義客戶端被拒。
我遇到問題的地方是我的全球@ControllerAdvice ValidationHandler
。
@ControllerAdvice
public class ValidationHandler {
@ExceptionHandler
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public @ResponseBody
StatusContext handleArgumentNotValid(MethodArgumentNotValidException error){
//format and return response
}
我@ExceptionHandler
似乎只在使用@RequestBody @Valid
所以這個方法返回一個格式化的響應方法被使用,
@RequestMapping(value = "/works", method = RequestMethod.POST)
public @ResponseBody
Formatted addUser(@RequestBody @Valid ValidBean user)
而這一次沒有,
@RequestMapping(value = "/noGood", method = RequestMethod.POST)
public @ResponseBody
NotFormatted addUser(@Valid ValidBean user)
雖然兩者似乎確實執行驗證。