1. ホーム
  2. java

[解決済み] コンストラクタに @JsonCreator のアノテーションを付けると、その引数に @JsonProperty のアノテーションを付けなければならないのはなぜですか?

2022-06-20 10:12:09

質問

Jackson では、コンストラクターにアノテーションを付ける際に @JsonCreator でアノテートする場合、その引数を @JsonProperty . ですから、このコンストラクタ

public Point(double x, double y) {
    this.x = x;
    this.y = y;
}

はこうなる。

@JsonCreator
public Point(@JsonProperty("x") double x, @JsonProperty("y") double y) {
    this.x = x;
    this.y = y;
}

なぜそれが必要なのか理解できません。説明していただけませんか?

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

ジャクソンは、JSON オブジェクトからコンストラクターにどのような順序でフィールドを渡すかを知っておく必要があります。 Java ではリフレクションを使用してパラメータ名にアクセスすることはできません。そのため、アノテーションでこの情報を繰り返す必要があるのです。