我见过这个好机制:
http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/
是否可以通过验证为所有控制器提供@Valid注释?执行以下操作似乎非常多余:
@RequestMapping(value = "/getPlayerAccounts", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public QueryResultsDTO<PlayerAccountResultDTO> getPlayerAccounts(@RequestBody **@Valid** FilteredQueryRequestDTO filteredQueryRequestDTO,
**BindingResult result**) {
**this.validateDTO(result);**
return this.playerService.getPlayerAccounts(filteredQueryRequestDTO);
}
还原代码:
@Valid
BindingResult结果
this.validateDTO(结果);
这些似乎是一种反复出现的模式,可能有人已经解决了它?也许与方面? 我不在乎我的所有方法和控制器都会有@Valid登录,他们收到的大多数DTO都会有效(因为没有对它们应用验证注释)
由于
答案 0 :(得分:2)
你不能省略@Valid注释,因为这是告诉spring哪个dto要验证的方法,这就是spring验证的工作方式。但是没有必要对每个方法都有一个BindingResult结果。你可以完全省略它。如果您想在验证失败时执行某些操作,则可以从异常处理方法中捕获在该情况下抛出的MethodArgumentNotValidException
(例如,您可以使用包含@ControllerAdvice
注释的类{{1}应用于所有控制器的方法 - 异常处理是一个完全不同的主题,您可以阅读有关spring mvc exception handling documentation)的更多详细信息