- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 org.codehaus.jackson.map.ObjectMapper
反序列化具有默认值的 JSON 字符串,如下所示:
我有以下 POJO:
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class CompanyRequest {
@Builder.Default
private String email = "";
private int company;
@Builder.Default
List<UserIdMapping> users = new ArrayList<>();
}
并在执行以下操作时:
CompanyRequest companyRequest = objectMapper.readValue(message, CompanyRequest.class);
消息在哪里:
{
"email": "john@doe.com",
"company": 42,
}
它按预期工作,这意味着 companyRequest
已使用 users
初始化为空 ArrayList
。
然后我切换到 com.fasterxml.jackson.databind.ObjectMapper
,但是相同 message
的 users
是 null
.
我能够通过以下更改解决它:
@Data
@EqualsAndHashCode
@Builder
public class CompanyRequest {
private String email;
private int company;
private List<UserIdMapping> users;
@JsonCreator
public CompanyRequest() {
this.email = "";
this.users = new ArrayList<>();
}
@Builder
public CompanyRequest(String email, int company, List<UserIdMapping> users) {
this.sfAccountId = StringUtils.isEmpty(email) ? "" : email;
this.company = company;
this.users = CollectionUtils.isEmpty(users) ? new ArrayList<>() : users;
}
}
但是在得知 codehaus
在没有这种操作的情况下实际上按预期工作后,我想知道是否有一种更简洁的方法来使用 fasterxml
,因为 fasterxml
是 ObjectMapper
的新版本,意思是它是启用它的功能吗?
最佳答案
Jackson 的“codehaus”版本是 Jackson 的 1.x 版本。从 2.0 开始,Jackson 位于“com.fasterxml.jackson”。在没有对其进行测试的情况下,很可能只是(有意地)在 Jackson 2 中改变了行为。
但是,正如您自己发现的那样,您可以明确建议 Jackson 在反序列化时使用无参数构造函数。您还可以将该注释放在 lombok 生成的构造函数上,这样您就不必手动编写它:
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor(onConstructor_ = @JsonCreator)
@AllArgsConstructor
public class CompanyRequest {
@Builder.Default
private String email = "";
private int company;
@Builder.Default
List<UserIdMapping> users = new ArrayList<>();
}
确保您至少使用 Lombok v1.18.2,以便确保 @Builder.Default
值也在此构造函数中设置。
如果您希望不变性和构建器是创建实例的唯一方法(至少使用 Lombok v1.18.16),请考虑将 @Jacksonized @Builder
放在类上:
@Jacksonized
@Builder
@Value
public class CompanyRequest {
@Builder.Default
private String email = "";
private int company;
@Singular
List<UserIdMapping> users;
}
关于java - 在 codhaus 和 fastexml 上使用 lombok 的 Jackson ObjectMapper 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66653918/
我正在使用 org.codehaus.jackson.map.ObjectMapper 反序列化具有默认值的 JSON 字符串,如下所示: 我有以下 POJO: @Data @Builder @Equ
我正在使用 org.codehaus.jackson.map.ObjectMapper 反序列化具有默认值的 JSON 字符串,如下所示: 我有以下 POJO: @Data @Builder @Equ
我是一名优秀的程序员,十分优秀!