[英]Spring mvc controller jsr 303 basic list validation
我有一个简单的MVC控制器,它接收电子邮件列表,然后将消息发送到这些电子邮件。
{"emailAddresses" : []}
@RequestMapping(value = "/{id}/share", method = RequestMethod.POST)
@ResponseBody
public void shareThing(@PathVariable(value = "id") final String id, @Valid @NotEmpty @RequestBody final List<String> emailAddresses)
基本上,我想使用jsr-303,以便如果客户端发布不带电子邮件的请求,则失败。 最好带有401。
上面的代码应该工作吗? 还是我该怎么办? 这是设置。 Hibernate验证程序位于类路径上,因此应该可以使用。 但是,如果我发布一个空的json数组,它将直接进入一个以空数组列表作为绑定参数的方法。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.package.thing"})
public class WeConfiguration extends WebMvcConfigurerAdapter
{"emailAddresses" : []}
@RequestMapping(value = "/{id}/share", method = RequestMethod.POST)
@ResponseBody
public void shareThing(@PathVariable(value = "id") final String id, @Valid @NotEmpty @RequestBody final List<String> emailAddresses, BindingResult bindingResult)
{
System.out.println("Has Errors? " + bindingResult.hasErrors();
}
有错误吗? 假
public class EmailListDTO {
@NotEmpty
private List<String> emailAddresses;
public List<String> getEmailAddresses() {
return emailAddresses;
}
public void setEmailAddresses(List<String> emailAddresses) {
this.emailAddresses = emailAddresses;
}
}
@RequestMapping(value = "/{id}/share", method = RequestMethod.POST)
@ResponseBody
public void shareThing(@PathVariable(value = "id") final String id, @Valid @RequestBody EmailListDTO emailListDTO, BindingResult bindingResult)
{
System.out.println("Has Errors? " + bindingResult.hasErrors();
}
{"emailAddresses" : []}
有错误吗? 真正
@Valid
验证参数类类型本身是否在字段上具有javax.validation
批注。 因此,它将使用Validator
扫描List
类以获取验证注释,这不是您想要的。
您应该将List<String>
包装到DTO中,并将参数更改为
public class MyListDTO {
@NotEmpty
private List<String> emailAddresses;
... //getters and setters
}
@Valid
不仅使它失败, BindingResult
错误绑定到BindingResult
对象。 如果添加,请在处理程序方法中添加BindingResult
参数(该参数必须位于@Valid
参数旁边)
public void shareThing(@PathVariable(value = "id") final String id, @Valid @RequestBody final MyListDTO myDTO, BindingResult errors )
然后,您可以检查BindingResult
是否有错误,然后选择要执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.