6

私はJersey JAX-RSをJackson(シリアライゼーション/デシリアライゼーション用)で使用して、一連のRESTサービスを実装しています。呼び出し元が更新操作 (PUT など) を実行する場合、私は通常、ターゲットが更新されたときにリクエストで送信された null フィールドは無視されるという規則に従いました。実際の値に設定されたフィールドのみが更新されます。

ただし、null として送信されたフィールドとまったく送信されなかったフィールドを区別できれば、明示的に null として送信されたフィールドをクリアできることがわかっていると思います。

これを達成する方法を発明することはできますが、フレームワークで利用できるものがあるかどうか疑問に思っています。一般的な要件のようです。

4

1 に答える 1

2

JSON POJO サポート ( incom.sun.jersey.api.json.POJOMappingFeatureへの初期化パラメーター) を使用している場合、簡単な解決策は、POJO に「スマート セッター」を設定することです。trueweb.config

class MyBean {
    private String foo;
    private String bar;
    private boolean fooSet;

    public String getFoo() {
        return this.foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
        this.fooSet = true;
    }

    public String getBar() {
        return this.bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

    public boolean isFooSet() {
        return this.fooSet;
    }
}

Jackson は、フィールドが存在する場合 (値に関係なく) セッターを呼び出し、フィールドが完全に欠落している場合は無視します。

JAXB ベースの JSON サポートについては、setter が呼び出されるかどうかはわかりません。そのため、カスタムのMessageBodyReader/ MessageBodyWriters または特殊な形式のJSONJAXBContext.

于 2013-05-26T13:27:30.810 に答える