jackson 2 を使用して、フレームワーク オブジェクト (ソース コードへのアクセスなし) を JSON にデシリアライズしようとしています。
class Item {
public Item(Long id) {}
}
Javassist で作成された新しいメソッドのパラメーターに注釈を追加することを見つけましたが、このソリューションは JavaAssist に基づいており、完全には適用されません :(
根本的な問題は、パラメーターに対応する @JsonProperty アノテーションと一緒に @JsonCreator アノテーションを使用して解決できる DefaultConstructors の欠如です。
@JsonCreator
class Item {
public Item(@JsonProperty("id") Long id) {}
}
mixinクラスを使用して、多くのアイテムサブクラスの1つでこれを達成することができました。
public abstract class ItemChildMixin {
@JsonCreator
public ItemChildMixin(@JsonProperty("objId") final Long objId) {
}
}
しかし、関連するすべてのオブジェクトにほぼ同じ内容の mixin クラスを作成するのは間違ったアプローチのように思われるので、側面を調べ始めました。
アイテムの階層内のクラスにアノテーションを追加するのは簡単でした:
aspect DeclareJsonCreatorAspect {
declare @constructor: Item+.new(Long): @JsonCreator;
}
ただし、アスペクトを使用してコンストラクターのパラメーターに注釈を追加する方法が見つからないようです! Aspectj in Action と Google はまだ回答を提供していません。これはまったく可能ですか?