Ran*_*ds7 16 java immutability jackson lombok spring-boot
将我的项目更新为Spring Boot 1.5.10后,Lombok停止了与Jackson的正常工作.我的意思是不可变的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...
}
Run Code Online (Sandbox Code Playgroud)
因此,在将Spring Boot更新到1.5.10之后,这段代码无效,我需要像这样配置lombok:
lombok.anyConstructor.addConstructorProperties = true
Run Code Online (Sandbox Code Playgroud)
有没有人知道用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 {
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有合作@JsonProperty("other-field-1-name").Ofc,它可以通过简单的方式完成@JsonCreator,但也许有一些方法可以使用它与lombok使用一些构造函数/ jackson注释?
所以这不是完全相同的情况,但这适用于我的问题。我需要在构建器上使用 @JsonDeserialize 注释,将其放在构建器上可以明确解决问题(以样板代码为代价)。至少我不需要输入构建器的其余部分。
@Value
@Builder
@JsonDeserialize(builder = ProductPrice.ProductPriceBuilder.class)
public class ProductPrice {
@JsonSerialize(using = MoneySerializer.class)
@JsonDeserialize(using = MoneyDeserializer.class)
Money price;
Duration rentalLength;
Period recurrence;
@JsonPOJOBuilder(withPrefix = "")
public static class ProductPriceBuilder{
@JsonDeserialize(using = MoneyDeserializer.class)
public ProductPrice.ProductPriceBuilder price(Money price) {
this.price = price;
return this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |