1

Spring 4 を使用して、リソース (以下の例の A) に、REST 更新 (http put および patch) を使用するときに無視する必要があるプロパティがあるユースケースがあります。プロパティは、作成時にのみ値を持つことができます (http 投稿)。そのため、 createでのアンマーシャリングではそのプロパティを考慮する必要がありますが、 update では無視する必要があります

public class A {
  private String strOnCreateAndUpdate; //persist on both create and update
  private String strOnCreateOnly; //only persist on create, never on update
  //getters & setters
} 

コントローラーで

@RestController
@RequestMapping(value="/a"
public class ControllerA {
    @RequestMapping(method= RequestMethod.POST)
    public void create(@Validated @RequestBody A req) {
        //create the record
    }

    @RequestMapping(value="/{id}", method=RequestMethod.PUT)
    public void update(@PathVariable Long id, @Validated @RequestBody A req) {
        //Update the record by ignoring strOnCreateOnly
    }

    @RequestMapping(value="/{id}", method=RequestMethod.PATCH)
    public void update(@PathVariable Long id, @RequestBody Map<String,Object> reqMap){
        //Update the record by ignoring strOnCreateOnly
    }
}

私が考えることができる 1 つの方法 (そして非常に洗練されていない方法) は、アンマーシャルを実行できるようにすることですが、更新メソッド内で strOnCreateOnly を手動で元の値に設定します。

しかし、Spring 4 と Jackson を使用して構成可能な方法はありますか (たとえば、注釈を使用し、非整列化からプロパティを無視するなど)? API の呼び出し元にエラーを送り返し、strOnCreateOnly の更新は許可されていないことを伝えても問題ありません。

4

1 に答える 1

0

そんな方にお使いいただけると思います@JsonView

ジャクソン・ドク・リンク

Viewアクションの種類 (更新、作成、すべて) を表すクラスを作成します。このようなもの

// View definitions:
class Views {
    static class Common { }
    static class Update extends Common { }
    static class Create extends Common { }
}   

このようにクラスに適用します

public class A {
    @JsonView(View.Common.class)
    private String strOnCreateAndUpdate; //persist on both create and update

    @JsonView(View.Create.class)
    private String strOnCreateOnly; //only persist on create, never on update
    //getters & setters
} 

create メソッドで、クラスをビューでマーシャリングしCreateます。次に、更新メソッドで、CommonまたはUpdateビューを使用します。

于 2014-07-26T04:54:41.300 に答える