[英]Build Java Bean From another one
我想构建一个从另一个VO生成JSON的VO,并且可以通过两种不同的方式来实现,我想知道一个女巫对您更好:
第一种方法是在构造函数中设置一些变量
@JsonAutoDetect
public static class SkuDataVO implements Serializable {
@JsonProperty
private String skuTitle;
@JsonProperty
private String headline;
@JsonProperty
private BigDecimal originalPrice;
@JsonProperty
private BigDecimal offerPrice;
@JsonProperty
private Integer cap;
@JsonProperty
private BigDecimal postagePerUnit;
@JsonProperty
private Float revenueShare;
public SkuDataVO(SubmissionSku submissionSku, String title, String headline) {
this.skuTitle = title;
this.headline = headline;
this.originalPrice = submissionSku.getOriginalPrice();
this.offerPrice = submissionSku.getPrice();
this.cap = submissionSku.getCap();
this.revenueShare = submissionSku.getRevenueShare();
this.postagePerUnit = submissionSku.getPostageCost();
}
//getter on variables
第二种方法是在吸气剂中调用第二个VO的吸气剂。
@JsonAutoDetect
public static class SkuDataVO implements Serializable {
@JsonProperty
private String skuTitle;
@JsonProperty
private String headline;
@JsonIgnore
private SubmissionSku submissionSku;
public SkuDataVO(SubmissionSku submissionSku, String title, String headline) {
this.submissionSku = submissionSku;
this.skuTitle = title;
this.headline = headline;
}
@JsonProperty
public BigDecimal getOriginalPrice() {
return submissionSku.getOriginalPrice();
}
@JsonProperty
public BigDecimal getOfferPrice() {
return submissionSku.getPrice();
}
@JsonProperty
public Integer getCap() {
return submissionSku.getCap();
}
@JsonProperty
public Float getRevenueShare() {
return submissionSku.getRevenueShare();
}
@JsonProperty
public BigDecimal getPostagePerUnit() {
return submissionSku.getPostageCost();
}
public String getSkuTitle() {
return skuTitle;
}
public String getHeadline() {
return headline;
}
在我看来,第一种方法是更好的选择。 据我了解,您只需要这个VO创建JSON,然后一次就可以从另一个VO中的Values创建一个,因此就不需要明确拥有另一个VO(例如,通过更新SubmissionSkuVO中的值来更新SkuDataVO中的值)因此,我认为您可以将VO用作数据进行序列化和反序列化的简单“存储”。 同样对于只看到类的“外部”的人来说,如果他们无权访问反编译的源代码,则隐式更新行为可能会有些混乱。 问候
请查看@JsonUnwrapped
注解 。 我认为这正是您的用例所需要的:
public static class SkuDataVO implements Serializable {
public String skuTitle;
public String headline;
@JsonUnwrapped // <-- magic happens here
public SubmissionSku submissionSku;
public SkuDataVO(SubmissionSku submissionSku, String title, String headline) {
this.submissionSku = submissionSku;
this.skuTitle = title;
this.headline = headline;
}
}
我使用了public
字段,因为这不是实际的对象,而只是用于适当格式化JSON的DTO(数据传输对象) 。
此外,我认为您实际上不需要使用@JsonProperty
和@JsonAutoDetect
,因为您没有更改默认的Jackson行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.