所有控制器的Spring MVC @Valid注释?

时间:2014-11-18 14:56:35

标签: java spring validation spring-mvc

我见过这个好机制:

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都会有效(因为没有对它们应用验证注释)

由于

1 个答案:

答案 0 :(得分:2)

你不能省略@Valid注释,因为这是告诉spring哪个dto要验证的方法,这就是spring验证的工作方式。但是没有必要对每个方法都有一个BindingResult结果。你可以完全省略它。如果您想在验证失败时执行某些操作,则可以从异常处理方法中捕获在该情况下抛出的MethodArgumentNotValidException(例如,您可以使用包含@ControllerAdvice注释的类{{1}应用于所有控制器的方法 - 异常处理是一个完全不同的主题,您可以阅读有关spring mvc exception handling documentation)的更多详细信息