[解決済み] Lombokのlombok.copyableAnnotationsがJacksonアノテーションで機能しない件
質問
ロンボク島で新しく導入された
copyableAnnotations
のようなジャクソンアノテーションを作成するための機能です。
@JsonIgnore
と
@JsonValue
をコピーして、生成されたgetter/witherメソッドにコピーしています。このブログでは、これでうまくいくはずだと示唆しているようだ。
https://www.thecuriousdev.org/lombok-builder-with-jackson/
. しかし、これを試すと、単に "error: annotation type not applicable to this kind of declaration" と表示されるだけです (私の
value
フィールドがあります)。なぜうまくいかないのでしょうか、どうすればうまくいくのでしょうか。おそらく、私はこの機能がどのように機能することになっているのかを誤解しているのでしょう。私は、lombok 1.18.8を使用しています。
model.java:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Value;
import javax.validation.constraints.NotNull;
@Value
public class BrandId implements ValueObject<Long> {
@JsonCreator
public static BrandId of(final Long value) {
return new BrandId(value);
}
@NotNull
@JsonValue
private Long value;
}
lombok.config:
config.stopBubbling = true
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonIgnore
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonValue
解決方法は?
<ブロッククオートなぜ動かないのでしょうか?
は
@JsonValue
アノテーションは、メソッド宣言と他のアノテーションタイプの宣言にのみ使用できます。したがって、Lombokの有無にかかわらず、このアノテーションをフィールドに付けることはできません。(もし、あなたが
そのJavadoc
でアノテーションされていることがわかる。
@Target(value={ANNOTATION_TYPE,METHOD})
.)
良い点としては
@JsonValue
はゲッターメソッドにのみ適用され (セッターメソッドやビルダーメソッドなどには適用されません)、クラスごとにひとつしか存在しないので、手動でひとつのゲッターを作成するだけなら大したことではありません。
@NotNull
private Long value;
@JsonValue
public Long getValue() {
return value;
}
もし、それがどうしても嫌なら、Lombokの実験的な
onMethod
という機能があります。
@NotNull
@Getter(onMethod=@__({@JsonValue}))
private Long value;
は、実験的であることを除けば上記と同等です (従って、LombokやJavaの将来のバージョンで変更されたり消滅したりする可能性があります)。
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Jackson を使用してオブジェクトの配列をデシリアライズする方法
-
[解決済み] シリアライズ中にフィールドの値が NULL の場合、それを無視するように Jackson に指示するにはどうすればよいですか?
-
[解決済み] Jackson JSONとHibernate JPAによる無限再帰の問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】javaで無効な文字定数