description
JSR303,但没有使用它,也不完全了解如何在春季环境中应用它。
从我了解的内容中,另一个选项是将
fooname
绑定到整个域对象并在那里添加验证约束,但是当前我的代码已设置为接受单个参数,如上所示。
使用此方法将验证应用于输入参数的最直接方法是什么?现在似乎是可能的(尝试了弹簧4.1.2),请参见Https://raymondhlee.wordpress.com/2015/08/08/29/validating-spring-spring-mvc-request-mvc-request-mapping-mathod-method-parameters/
从上一页提取:
@RequestBody
aadd @valided to Controllerclass
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
@ExceptionHandler方法中的Handle CondraintVioLationException
无论如何,没有什么可以做到的。 使用当前版本版本,如果您需要自动验证,您仍然需要使用WebDatabinder将参数绑定到对象上。 如果您使用SpringMVC,即使不是您的首选此任务,也值得学习。 它看起来像这样:
@RequestMapping("/hi")
public String sayHi(@Size(max = 10, message = "name should at most 10 characters long") @RequestParam("name") String name) {
return "Hi " + name;
在您的方法签名中的任何对象都不是“预期”的弹簧之一,例如注入诸如
public ModelAndView createFoo(@PathVariable long level1,
@PathVariable long level2,
@Valid @ModelAttribute() FooWrapper fooWrapper,
BindingResult errors) {
if (errors.hasErrors() {
//handle errors, can just return if using Spring form:error tags.
}
}
public static class FooWrapper {
@NotNull
@Size(max=32)
private String fooName;
private String description;
//getset
}
HttpRequest
ModelMap
有个人风格的事情,在这种情况下,它没有做任何事情。 JSR-303与@Valid在方法参数线上通过@ModelAttribute
中的集成。 如果使用WebDataBinder
,则根据内容类型使用spring spring为请求主体(通常仅来自HTTP标头)使用对象编组器。调度器servlet(确实)真的没有办法为任何任意的Marshaller“翻转验证开关”。 它只是将Web请求内容传递到消息转换器并恢复对象。 没有生成绑定的对象,因此无处可设置错误。
您仍然只能将验证器注入控制器并将其运行在您获得的对象上,它只是在请求参数上没有魔术集成为您。
如果您有多个需要验证的请求参数(使用httpget
或
post)。您还可以创建一个
custom模型class,并与 @
Modelattribute一起使用 @
valid来验证参数。这样,您可以使用
-Hibernate验证器或javax.validatorapi
来验证参数。它是这样的:Request方法:
@RequestBody
ModelRequestclass
:
AnnotationMethodHandlerAdapter
希望有帮助