sur*_*993 8 java pojo jackson lombok jackson-databind
我使用带有构建器模式的lombok构造了一个Java对象。但是,当尝试使用Jackson来反序列化Java对象时,出现以下异常。对于具有@JsonProperty注释的字段,会发生这种情况。
线程“ main”中的异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“ user_name”(类User $ UserBuilder),未标记为
位于[[来源:(String)“ {” 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 {
}
}
Run Code Online (Sandbox Code Playgroud)
请帮助我解决这个问题。
谢谢。
从 Lombok v1.18.16 开始,您应该能够使用 @Jacksonized 注释。
@Data
@Jacksonized
@Builder
public class Pojo {
@JsonProperty("package")
String pkg;
}
Run Code Online (Sandbox Code Playgroud)
您收到此错误,因为杰克逊不知道如何映射user_name到您的任何UserBuilder字段。
您也需要@JsonProperty("user_name")这样的userName领域UserBuilder:
@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {
@JsonProperty("user_name")
@NonNull
private String userName;
}
Run Code Online (Sandbox Code Playgroud)
您的映射器需要有一种创建 User 类的方法。
您可以使用构造函数:
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
@Builder
class User {
@JsonProperty("user_name")
@NonNull
private String userName;
private int userId;
}
Run Code Online (Sandbox Code Playgroud)
...或根据Tomasz Linkowski的回答将其指向 builder
| 归档时间: |
|
| 查看次数: |
5411 次 |
| 最近记录: |