Это кажется очевидным требованием, поэтому я удивлен, что нет доступных примеров, но у меня есть класс с аннотацией сборщика Lombok, который содержит класс, в котором также есть сборщик Lombok, вот так:
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(value = PropertyNamingStrategy.KebabCaseStrategy.class)
@JsonPropertyOrder({ "priceList", "assetRate", "name", "id", "attributes", "description" })
public class T24Element {
private T24PriceList priceList;
private String assetRate;
private String name;
private String id;
@Singular("attribute")
private List<ReferenceDataItem> attributes;
private String description;
}
T24PriceList и ReferenceDataItem имеют следующий вид:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class T24PriceList {
private PricedItem leaseTermPrice;
private PricedItem assetFee;
private PricedItem basePrice;
}
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonDeserialize(builder = ReferenceDataItem.ReferenceDataItemBuilder.class)
@JsonNaming(value = PropertyNamingStrategy.KebabCaseStrategy.class)
@JsonPropertyOrder({ "description", "code", "endDate" })
public class ReferenceDataItem {
private String description;
private String code;
/**
* Rarely used - seems to be only for leasePeriod reference data
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private LocalDate endDate;
}
Наконец, PricedItem:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PricedItem {
private String priceType;
private String matCode;
private String currencyMnemonic;
private BigDecimal value;
}
Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, как я использую конструктор, я никогда не смогу получить аннотированные классы @Builder
внутри других классов, построенные как что-то отличное от null
. Так, например, если я начну с:
public static T24Element t24Element = T24Element.builder()
.priceList(t24PriceList)
.assetRate("GP")
.attributes([shortCutKey, coreServiceType, size, sellerPid, leasePeriod, capacity,
renewAttribute, dimensions, sellerPid2])
.id("903551")
.name("Small Post Office Box")
.description("Personal mail")
.build()
public static T24PriceList t24PriceList = T24PriceList.builder()
.assetFee(assetFee)
.basePrice(basePrice)
.leaseTermPrice(leaseTermPrice)
.build()
public static PricedItem leaseTermPrice = PricedItem.builder()
.priceType("ZPOB")
.matCode("903551")
.currencyMnemonic("AUD")
.value(new BigDecimal("253.92"))
.build()
public static PricedItem assetFee = PricedItem.builder()
.priceType("ZPBF")
.matCode("903613")
.currencyMnemonic("AUD")
.value(new BigDecimal("25"))
.build()
public static PricedItem basePrice = PricedItem.builder()
.priceType("ZPOB")
.matCode("903551")
.currencyMnemonic("AUD")
.value(new BigDecimal("277"))
.build()
значение t24PriceList
будет нулевым. Даже если basePrice
сам по себе инициализируется правильно, когда я пытаюсь использовать это значение в:
public static T24PriceList t24PriceList = T24PriceList.builder()
.assetFee(assetFee)
.basePrice(basePrice)
.leaseTermPrice(leaseTermPrice)
.build()
это всегда ноль. Похоже, Ломбок не может видеть строителей агрегированных классов. Что мне здесь делать?
Кстати: я понимаю, что использую множество аннотаций, но я пробовал разные комбинации, такие как @Getter
и @Setter
вместо @Data
и т. Д., Чтобы попытаться заставить это работать.