我有一个简单的 MVC 控制器,它接收电子邮件列表,然后将消息发送到这些电子邮件。
json POST 正文
{"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
json POST 正文
{"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();
}
输出
有错误吗?错误的
试用 3,更改有效负载,工作...但我不认为需要包装?
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();
}
json POST 正文
{"emailAddresses" : []}
输出
有错误吗?真的