【发布时间】:2020-07-17 03:07:55
【问题描述】:
我想反序列化 lombok 构建器中的 Java 可选字段。下面是我的代码
@JsonDeserialize(builder = AvailabilityResponse.Builder.class)
@Getter
@ToString
@EqualsAndHashCode
@Builder(setterPrefix = "with", builderClassName = "Builder", toBuilder = true)
public class AvailabilityResponse {
private final List<Train> trainDetails;
private final String name;
private final Optional<String> detail;
public static class Builder {
@JacksonXmlProperty(localName = "TRAIN")
private List<Train> trainDetails;
@JacksonXmlProperty(localName = "NAME")
private String name;
@JacksonXmlProperty(localName = "DETAIL_TRAIN", isAttribute = true)
private String detail;
public AvailabilityResponse build() {
return new AvailabilityResponse(
trainDetails, // I have field validation here. if null or empty throwing Exception
name, // I have field validation here. if null or empty throwing Exception
Optional.ofNullable(detail)); // This is Optional field
}
}
}
如果我像下面这样覆盖构建器方法,则能够反序列化
private Optional<String> name; // this is static builder class field
@JacksonXmlProperty(localName = "DETAIL_TRAIN", isAttribute = true)
public Builder detail(final String theDetail) {
this.detail = Optional.ofNullable(theDetail);
return this;
}
我在@Builder 中使用了 setterPrefix ="with"。但是如果我用“with”前缀覆盖上面的方法,它就不起作用了。
请有人帮我实现这一目标
【问题讨论】:
-
请显示你的xml。
-
@杰森123455 nsmr23
标签: java jackson optional lombok jackson-databind