Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个构建javabean_Java - Fatal编程技术网

从另一个构建javabean

从另一个构建javabean,java,Java,我想构建一个VO,从另一个VO生成JSON,我可以用两种不同的方式,我想知道其中一种更适合您: 第一种方法是在构造函数中设置一些变量 @JsonAutoDetect public static class SkuDataVO implements Serializable { @JsonProperty private String skuTitle; @JsonProperty private String headline; @JsonPropert

我想构建一个VO,从另一个VO生成JSON,我可以用两种不同的方式,我想知道其中一种更适合您:

第一种方法是在构造函数中设置一些变量

@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
第二种方法是调用getter中第二个VO的getter

@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中的值创建一次,因此不需要显式地使用其他VO(例如,通过更新SubmissionSkuVO中的值来更新SkuDataVO中的值),因此我认为您可以将VO用作数据序列化和反序列化的简单“存储”。另外,对于刚刚看到类“外部”的人来说,如果他们无法访问反编译的源代码,那么impicit更新行为可能会有点混乱。 问候

请看一下。我认为这正是您的用例所需要的:

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;
    }
}
公共静态类SkuDataVO实现可序列化{
公共名称;
公共字符串标题;

@JsonUnwrapped//请使用apache Commons中的BeanUtils这是一个想法,但是如果对象之间的变量名不同,就不那么方便了。。