롬복 + 잭슨 불변량
제 프로젝트를 Spring Boot 1.5.10으로 업데이트한 후, Lombok은 Jackson과 제대로 작동하지 않게 되었습니다.내 말은 내 객체의 필드 이름이 json 요청의 필드와 다를 때 불변 DTO 생성을 의미합니다.
@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.anyConstructor.addConstructorProperties = true
이 롬복 수정 없이 잭슨 + 롬복으로 그런 개체를 만드는 다른 방법을 아는 사람이 있습니까?이 수정 대신 다음 코드를 사용할 수 있습니다.@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")
물론, 그것은 간단한 방법으로 할 수 있습니다.@JsonCreator
하지만 일부 생성자/스캐너 주석을 사용하여 롬복과 함께 사용할 수 있는 방법이 있을까요?
그래서 이것은 정확히 같은 경우는 아니지만, 이것은 제 문제에 효과가 있습니다.저는 빌더에 @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;
}
}
}
이 질문이 2017년 1월 이후에 제기된 것을 고려하면, 저는 당신이 롬복 버전을 업그레이드했을 수도 있다고 생각합니다.1.16.20
스프링 부츠와 함께.그리고 여전히 JDK 8을 사용하고 있습니다.
Spring Boot 버전을 업데이트할 수 있지만 Lombok 버전을 다음 위치로 유지할 수 있습니다.1.16.18
이를 통해 추가 사용자 정의 및 역직렬화를 빌드 작업을 통해 구현할 수 있습니다.즉, 새로운 롬복 주석을 사용하지 않는 한.
1.16.20에서는 특히 JDK 8에서 잠재적으로 문제를 일으킬 수 있는 JDK 9의 중단된 변경 사항을 해결하기 위한 상당한 노력이 있었습니다.
1.16.20 @ 잭슨을 위해 더 이상 데이터 객체를 구성할 수 없습니까?< 그 밖에 유사한 문제를 인식한 사람
언급URL : https://stackoverflow.com/questions/48644809/lombok-jackson-immutables
'source' 카테고리의 다른 글
@SpringBoot 앱에서 RabbitListener 메서드 테스트 (0) | 2023.07.21 |
---|---|
갑자기 멈추는 파이썬으로 거대한 CSV를 처리할 때 '킬드'는 무엇을 의미합니까? (0) | 2023.07.21 |
math.log에서 ValueError: math domain error가 발생하는 이유는 무엇입니까? (0) | 2023.07.21 |
springapplication.properties에서 토끼 대기열 수신을 비활성화하는 중 (0) | 2023.07.21 |
정적 컨텐츠 스프링 부트 응용 프로그램 다시 로드 (0) | 2023.07.21 |