Java Spring 3.2验证请求参数,ControllerAdvice未格式化响应
我正在使用JSR303Java Spring 3.2验证请求参数,ControllerAdvice未格式化响应,java,spring,validation,Java,Spring,Validation,我正在使用JSR303@Valid验证控制器中的多个请求参数,这些参数与一个多部分文件一起发布 验证部分似乎正在发挥作用 @RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody Response upload(@RequestParam(value = "file", required = true) MultipartFile file, @Vali
@Valid
验证控制器中的多个请求参数,这些参数与一个多部分文件一起发布
验证部分似乎正在发挥作用
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody
Response upload(@RequestParam(value = "file", required = true) MultipartFile file,
@Valid ValidBean bean) {
//method
}
ValidBean
是字符串、长字符串和列表的集合
如果发布的参数与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)
尽管这两种方法似乎都在实际执行验证。for@Valid@RequestBody
有这样一句话:
与@modeldattribute参数一样,可以使用Errors参数
用于检查错误。如果未声明此类参数,则
将引发MethodArgumentNotValidException
这就是为什么方法签名为MethodArgumentNotValidException
的@ExceptionHandler
会被调用为@Valid@RequestBody
另一方面,如果没有@RequestBody
,但是使用@Valid
,如果没有额外的BindingResult
参数,将生成BindException
,这将不会由@ExceptionHandler
的当前特定签名处理。修复方法可能是将您的@ExceptionHandler
扩展一点,或者为BindException添加另一个@ExceptionHandler
。更好的方法是只添加BindingResult
作为附加参数
@RequestMapping(value = "/noGood", method = RequestMethod.POST)
public @ResponseBody
NotFormatted addUser(@Valid ValidBean user)