【发布时间】:2013-10-19 05:29:21
【问题描述】:
我有一个简单的 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" : []}
输出
有错误吗?真的
【问题讨论】:
-
正文中只有一个 json 数组。 POST 请求。将内容类型设置为 application/json。它在有值并填充列表时起作用——据我所知,它正在正确解析它。
标签: java spring spring-mvc bean-validation