将我的项目更新为Spring Boot 1.5.10 龙目岛停止与杰克逊合作。 我的意思是不可变的DTO创建,当我的对象中的字段名称与json请求中的字段不同时:
@Value
@Builder
public class MyImmutableDto implements Serializable {
@JsonProperty("other-field-1-name")
private final BigDecimal myField1;
@JsonProperty("other-field-2-name")
private final String myField2;
and a lot of fields there...
}
因此,在将Spring Boot更新到1.5.10之后,这段代码不起作用,我需要像这样配置lombok:
lombok.anyConstructor.addConstructorProperties = true
有没有人知道使用jackson + lombok创建这样的对象的任何其他方法没有这个lombok修复?
我可以使用以下代码代替此修补程序:@JsonPOJOBuilder
和@JsonDeserialize(builder = MyDto.MyDtoBuilder.class)
:
@Value
@Builder
@JsonDeserialize(builder = MyDto.MyDtoBuilder.class)
public class MyDto implements Serializable {
// @JsonProperty("other-field-1-name") // not working
private final BigDecimal myField1;
private final String myField2;
private final String myField3;
and a lot of fields there...
@JsonPOJOBuilder(withPrefix = "")
public static final class MyDtoBuilder {
}
}
但它不适用于@JsonProperty("other-field-1-name")
。
Ofc,它可以通过简单的@JsonCreator
完成,但也许有一些方法可以使用它与lombok使用一些构造函数/ jackson注释?
答案 0 :(得分:1)
所以这不是完全相同的情况,但这适用于我的问题。我需要在构建器上使用@JsonDeserialize注释,将它放在构建器上明确解决问题(以样板代码为代价)。至少我不需要输出构建器的其余部分。
UIView
答案 1 :(得分:0)
考虑到2017年1月之后提出这个问题,我假设你可能已经升级了你的Lombok 1.16.20
版本以及Spring Boot。并且仍在使用JDK 8
您可以更新Spring Boot的版本,但可能希望将Lombok版本保留在1.16.18
。这将允许您通过构建器解决方案实现额外的自定义和反序列化。也就是说,只要你没有使用任何新的lombok注释。
在1.16.20中有很多努力专门解决JDK 9中的重大变化,这可能会导致JDK 8上的问题继续发展。
1.16.20 @Data object no longer constructable for jackson?<其他承认类似问题的人。