1. ホーム
  2. java

[解決済み] Jackson は 'is' を削除してプリミティブな boolean フィールドの名前を変更した。

2022-06-13 12:12:30

質問

これは重複しているかもしれません。しかし、私は私の問題に対する解決策を見つけることができません。

私はクラスを持っています

public class MyResponse implements Serializable {

    private boolean isSuccess;

    public boolean isSuccess() {
        return isSuccess;
    }

    public void setSuccess(boolean isSuccess) {
        this.isSuccess = isSuccess;
    }
}

ゲッターとセッターはEclipseで生成されます。

別のクラスで、値をtrueに設定し、JSON文字列として書き込んでいます。

System.out.println(new ObjectMapper().writeValueAsString(myResponse));

JSONでは、キーは次のように来ています。 {"success": true} .

キーは isSuccess のようにしたいのです。Jacksonはシリアライズ時にセッターメソッドを使用しているのでしょうか?どうすればキーをフィールド名そのものにできますか?

どのように解決するのですか?

これは少し遅い回答ですが、このページに来る他の人にとっても役に立つかもしれません。

JacksonがJSONにシリアライズする際に使用する名前を変更するための簡単な解決策は、JSONにシリアライズするために JsonProperty アノテーションを使用することであり、したがって、この例は次のようになります。

public class MyResponse implements Serializable {

    private boolean isSuccess;

    @JsonProperty(value="isSuccess")        
    public boolean isSuccess() {
        return isSuccess;
    }

    public void setSuccess(boolean isSuccess) {
        this.isSuccess = isSuccess;
    }
}

これをJSONに直列化したものが {"isSuccess":true} のようにシリアライズされますが、ゲッターメソッド名を変更する必要がないという利点があります。

この場合、アノテーションは次のように書くこともできることに注意してください。 @JsonProperty("isSuccess") と書くこともできます。 value 要素しかないため