Spring 3.2 アプリケーションがあり、Spring MVC に基づいてこの例に従って REST API を作成しました。現在、さまざまな http メソッド (POST および PUT メソッドなど) のデータを検証しようとしているときに、いくつかの問題が発生しています。
これはかなり単純化された例になります。
public class myItem{
@NotEmpty
private String foo;
@NotEmpty
private String bar;
public myItem(String foo){
this.foo = foo;
this.bar = "";
}
public myItem(String foo, String bar){
this.foo = foo;
this.bar = bar;
}
/* getters & setters omitted */
}
この POJO は、さまざまなリクエスト メソッドで再利用されます。
これは私の単純化されたコントローラーになります:
@Controller
@RequestMapping("/api/item")
public class myItemController{
@RequestMapping(value="/", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody myItem createItem(@Valid @RequestBody myItem item){
/* do some stuff */
return item; //inserted item returned
}
@RequestMapping(value="/", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT)
public @ResponseBody myItem createItem(@Valid @RequestBody myItem item){
/* do some stuff */
return item //updated item returned
}
}
POST メソッドでは、foo フィールドのみが設定されると予想されるため、このリクエストは上記のアノテーションの before で失敗します。PUT メソッドでは、foo フィールドと bar フィールドの両方が設定されると予想されるため、このリクエストは正常に完了します。
この種の状況に対処するための正しいアプローチは何ですか: 特定のリクエスト メソッドでは、すべてのフィールドが入力されるとは限りません (一部のフィールドにはデフォルト値が設定されている可能性があるため、すべてのフィールドをチェックしたくない、別名 create )、別の方法では、すべてのフィールドをチェックする必要があります(別名更新)。