0

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 はまだ回答を提供していません。これはまったく可能ですか?

4

1 に答える 1