gpt4 book ai didi

java - Spring mvc controller jsr 303 基本列表验证

转载 作者:行者123 更新时间:2023-11-30 06:22:18 24 4
gpt4 key购买 nike

我有一个简单的 MVC Controller ,它获取电子邮件列表,然后向这些电子邮件发送消息。

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 validator 在类路径上,所以它应该被拾起。但是,如果我发布一个空的 json 数组,它会直接进入以空数组列表作为绑定(bind)参数的方法。

@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" : []} 

输出

有错误吗?是的

最佳答案

@Valid验证参数类类型本身是否有 javax.validation字段上的注释。所以它会使用 Validator扫描 List用于验证注释的类,这不是您想要的。

你应该包装你的 List<String>进入 DTO 并将您的参数更改为该参数

public class MyListDTO {
@NotEmpty
private List<String> emailAddresses;
... //getters and setters
}

@Valid不仅使它失败,还将错误绑定(bind)到 BindingResult目的。如果你添加一个BindingResult您的处理程序方法的参数(它必须在您的 @Valid 参数旁边)

 public void shareThing(@PathVariable(value = "id") final String id, @Valid @RequestBody final MyListDTO myDTO, BindingResult errors )

然后您可以检查 BindingResult错误并选择要做什么。

关于java - Spring mvc controller jsr 303 基本列表验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com