メールのリストを取得し、それらのメールにメッセージを送信する単純な 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" : []}
出力
エラーがありますか? 真実