在类型转换之后,在控制器的方法之前,需要进行验证。您可以实现自定义验证器并在其中引发异常。将新的验证器添加到
DataBinder,并将方法的参数标记为
@Validated:
@RestControllerpublic class ClientApiController { @InitBinder public void initBinder(DataBinder binder){ binder.addValidators(new Validator() { @Override public boolean supports(Class<?> aClass) { return aClass==Client.class; } @Override public void validate(Object o, Errors errors) { Client client = (Client)o; if(client.getId()==null) throw new ResourceNotFoundException(); } }); } @RequestMapping(path = "/{client}/someaction", method = RequestMethod.GET) String handleRequest(@Validated @Exists Client client) { // ... } @RequestMapping(path = "/{client}/anotheraction", method = RequestMethod.GET) String handleAnotherRequest(@Validated @Exists Client client) { // ... }}当然,您可以将验证器声明为单独的类,并在其他控制器中重复使用它。实际上,您可以在转换器中引发异常,但是有可能在应用程序的其他位置毫无例外地需要转换。



