我是Spring框架的新手。我目前正在构建一些新闻经理表单。
这是我的新闻实体样本:
class News
{
@NotNull
long id;
@NotNull
long idAuthor;
@Size(max=255)
String content;
}
如您所见,我在Spring中使用JSR303注释验证。我想验证我的“新闻编辑表格”。
@RequestMapping( value = "/edit" , method = RequestMethod.POST)
public String editAction(@Valid @ModelAttribute News news, BindingResult result)
{
System.err.println(result.hasErrors());
...
return "editView";
}
定义允许的字段:
//initBinder function :
binder.setAllowedFields("content");
好吧,我正在尝试仅验证“内容”字段(在我的活页夹上设置允许字段)...但是Spring总是验证我的实体上定义的所有字段(所以“id”&“idAuthor”返回错误)
我如何只验证允许的字段(在initBinder函数上设置)?
答案 0 :(得分:4)
没有好办法。
JSR-303提供了两种选择性验证方法:
validator.validateProperty(news, "content")
您可以定义验证组:
@Size(max=255, groups = {Default.class, WebValidation.class})
String content;
并验证指定的群组:validator.validate(news, WebValidation.class);
Spring MVC不直接支持这些方法。您可以自动装配JSR-303 Validator
并手动调用这些方法,但它们会返回Set<ConstraintViolation<?>>
,并且将这些ConstraintViolation
放入BindingResult
的代码深埋在Spring internals并且不能轻易重用(参见SpringValidatorAdapter
)。
在@Valid
- 样式方法(SPR-6373)中使用修订版3.1支持验证组的功能请求。
因此,除了创建一个特殊的DTO类之外,你没有很多选择:你可以使用手动验证(没有JSR-303),或者你可以将代码从SpringValidatorAdapter
复制粘贴到你自己的实用方法并手动调用JSR-303 Validator
的方法。