5

Jackson に文字列変数の値を引用符なしでシリアライズするように指示する注釈またはその他の方法はありますか。シリアライザーは、引用符なしで 1 つのフィールドの値のみをシリアル化する必要があります。

次のような返品を探しています。

{"name": "nameValue", "click" : function (e){console.log("message");}}

それ以外の

{"name": "nameValue", "click" : "function (e){console.log("message");}"}

上記は、外部の Java スクリプト ライブラリがデータを必要とする方法です。そのため、方法がない場合は、オブジェクト マッパーが文字列を JSON に変換した後で、文字列を手動で変更する必要があります。

4

3 に答える 3

5

まあ、技術的にはできます。結果は有効な JSON にはなりませんが、Jackson では可能です。

class Dto  {
    @JsonProperty("name")
    String foo = "nameValue";
    @JsonProperty("click")
    JsEntry entry = new JsEntry("function (e){console.log(\"message\");}");
}

class JsEntry implements JsonSerializableWithType {
    private String value;

    JsEntry(String value) {
        this.value = value;
    }

    @Override
    public void serializeWithType(JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
        this.serialize(jgen, provider);
    }

    @Override
    public void serialize(JsonGenerator jgen, SerializerProvider provider) throws IOException {
        jgen.writeRawValue(value);
    }
}

ただし、この要件は標準違反を引き起こし、改訂する必要があることに完全に同意します。

于 2013-08-10T17:49:03.857 に答える
3

これは有効な JSONではないため、使用できません。JSON は値転送形式であるため、関数を転送することはできません。

本当に JSON で関数を返す必要がある場合は、おそらく結果を JavaScript で後処理できます。

于 2013-08-10T17:24:49.010 に答える