Java Builderパターン付きのLombokを使用してオブジェクトを構築しました。しかし、Jacksonを使用してJavaオブジェクトをデシリアライズしようとすると、次の例外が発生します。 @JsonProperty
アノテーションを持つフィールドの場合。
スレッド "main"の例外com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:認識できないフィールド "user_name"(クラスUser $ UserBuilder)、無視可能としてマークされていない(2つの既知のプロパティ: "userName"、 "userId"])
at [ソース:(文字列) "{" userId ":1、" user_name ":" username "}";行:1、列:26](参照チェーンを介して:User $ UserBuilder ["user_name"])
使用コード:
public class TestJson {
public static void main(String args[]) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
User user = User.builder()
.userName("username")
.userId(1)
.build();
System.out.println(user);
String string = objectMapper.writeValueAsString(user);
System.out.println(string);
user = objectMapper.readValue(string, User.class);
System.out.println(user);
}
}
@JsonDeserialize(builder = User.UserBuilder.class)
@Getter
@ToString
@Builder(toBuilder = true)
class User {
@JsonProperty("user_name")
@NonNull
private String userName;
@JsonProperty
private int userId;
@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {
}
}
この問題の解決にご協力ください。
ありがとう。
ジャクソンは_user_name
_をUserBuilder
フィールドにマッピングする方法を知らないため、このエラーが発生します。
userName
のUserBuilder
フィールドにも@JsonProperty("user_name")
が必要です。
_@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {
@JsonProperty("user_name")
@NonNull
private String userName;
}
_
マッパーには、Userクラスを作成する手段が必要です。
コンストラクタを使用できます:
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
@Builder
class User {
@JsonProperty("user_name")
@NonNull
private String userName;
private int userId;
}
...または Tomasz Linkowski の回答に従って、ビルダーをポイントします