[英]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.