[英]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.