ジャクソンがオブジェクトを作成する方法は非常に興味があります。それは、セッターなしのプライベートプロパティ/フィールドだけでなく、空のコンストラクタを使用することです。ジャクソンはセッターなしでプライベートプロパティをどのように設定しますか?
私が求めている理由は、特定のプロパティをデシリアライズすると、これらの値に基づいて他のプロパティを自動的に設定したいということです。たとえば、イメージをシリアル化するのではなく、パスだけをシリアル化することができます。パスがデシリアライズされると、@JsonIgnore
フィールドImageは実際のイメージをロードできます。デシリアライズされたオブジェクトの構築後、フィールドはまだ割り当てられていません。そしてゲッターは論理的に呼び出されていません。だから、どのようなブードゥーの魔法が私のオブジェクトのプライベートな部分に触れているのですか?
public class ItemTemplate {
private String imagePath;
public ItemTemplate() {
System.out.println(imagePath); //Still null
}
public String getImagePath() {
System.out.println(imagePath); //Not being called when deserializing.
return imagePath;
}
}
しかし、ジャクソンが、それはそれはimagePath
セットのしているこのオブジェクトをデシリアライズ行われます。
リフレクションを使用して、プライベートフィールドにアクセス可能にした後。 http://stackoverflow.com/questions/1555658/is-it-possible-in-java-to-access-private-fields-via-reflection –
@JBNizetそれは素晴らしいトリックです。そして、それは私のためのトリックを行うプライベートセッターを作りました。今はパスが公開されていないので、他のプロパティを設定することができます。それは私のフォローアップの質問に間接的に答えました。ありがとう。 – Madmenyo