Java 对象到 JSON 的转换提供了 java builder 类中不存在的额外属性

Java object to JSON conversion is giving extra attributes which is not present in java builder class

提问人:Shahrukh Ali 提问时间:11/15/2023 更新时间:11/16/2023 访问量:21

问:

我正在使用 ObjectMapper 进行 Java 对象到 JSON 的转换,但它提供了我的 java 类中不存在的额外属性。

下面是 Java Object Builder 类。

@JsonDeserialize(builder = OrderSummary.Builder.class)
public class OrderSummary extends ABC {

    @JsonProperty("orderCode")
    private String orderCode;

    @JsonProperty("transactionAmount")
    private long transactionAmount;

    @JsonProperty("transactionCurrency")
    private String transactionCurrency;

    @JsonProperty("isPayout")
    private boolean isPayout;

    private OrderSummary(Builder builder) {
        super(builder);
        orderCode = builder.orderCode;
        transactionAmount = builder.transactionAmount;
        transactionCurrency = builder.transactionCurrency;
        isPayout = builder.isPayout;
    }
    public static Builder newBuilder() {
        return new Builder();
    }

    public String getOrderCode() {
        return orderCode;
    }
    public long getTransactionAmount() {
        return transactionAmount;
    }
    public String getTransactionCurrency() {
        return transactionCurrency;
    }
    public boolean isPayout() {
        return isPayout;
    }

    @JsonPOJOBuilder
    public static final class Builder extends ABC.Builder<Builder> {

        private String orderCode;

        private long transactionAmount;

        private String transactionCurrency;

        private boolean isPayout;

        private Builder() {
        }

        public Builder withOrderCode(String val) {
            orderCode = val;
            return this;
        }
        public Builder withTransactionAmount(long val) {
            transactionAmount = val;
            return this;
        }
        public Builder withTransactionCurrency(String val) {
            transactionCurrency = val;
            return this;
        }
        public Builder withIsPayout(boolean val) {
            isPayout = val;
            return this;
        }
        public OrderSummary build() {
            return new OrderSummary(this);
        }
        @Override
        protected Builder self() {
            return this;
        }
    }
}

它扩展了 1 个只有 2 个属性的类

  1. 交易代码
  2. 唯一标识符

但是当我使用Object Mapper对象转换为json时,json以下

{
              "payout": false,
              "transactionCode": "ABCJD",
              "uniqueIdentifier": 78632,
              "orderCode": "12345",
              "transactionAmount": 1200,
              "transactionCurrency": "EUR",
              "isPayout": false,
}

我不确定如何在 json 中添加。"payout": false,

我尝试转换另一个没有它的 java 对象工作正常,没有任何问题。boolean

你能帮我解决这个转换吗?

java json 序列化 Jackson ObjectMapper

评论

0赞 Dyjah 11/17/2023
你可能会在这里找到你的答案:stackoverflow.com/questions/32270422/......

答:

0赞 omar mahameed 11/16/2023 #1

我不知道你做了什么,又是怎么做到的。

一些可能是的解决方案

  1. 将此批注添加到序列化类

    @JsonIgnoreProperties({"payout"})

  2. 使用Google GSON,它非常高效,非常安全,并且在所有软件工程方面都非常好。