6

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 )、別の方法では、すべてのフィールドをチェックする必要があります(別名更新)。

4

1 に答える 1