为什么 ToStringBuilder(ToStringStyle.JSON_STYLE) 在对象前后添加引号?是真的吗

问题描述

我想用我的 java 类发送 json 请求,但是当我尝试发送我的 jsonObject 时,我认为传出对象出错了。

这是真实的对象:

{
    "brandCode":659599,"isNotAutoSendIYS": "false","consentData": {
        "consentDate":"2020-07-20 00:00:00","source":"HS_MESAJ","status":"ONAY","retailerCode":null,"retailerAccess":[],"recipient":"ornek@mysoft.com.tr","recipientType":"BIREYSEL","type":"EPOSTA"
    }
} 

这是我的 jsonObject 类:

{
"brandCode":659599,"isNotAutoSendIYS":false,"consentData":"{\"consentDate\":\"2020-07-20 00:00:00\",\"source\":\"HS_MESAJ\",\"status\":\"ONAY\",\"retailerCode\":null,\"retailerAccess\":[\"\"],\"recipient\":\"ornek@mysoft.com.tr\",\"recipientType\":\"BIREYSEL\",\"type\":\"EPOSTA\"}"
}

如果你注意到了,consentData 对象后面是双引号,对象末尾的双引号是闭合的。我该如何解决这种情况或这种情况是真的?我正在使用 ToStringBuilder 类。

这个 ConsentDataReqType.class :

public String toStringValidate(){
        return new ToStringBuilder(this,ToStringStyle.JSON_STYLE).append("brandCode",brandCode).append("isNotAutoSendIYS",isNotAutoSendIYS).append("consentData",consentData.toStringValidate()).toString();
    }

这个 ConsentData.class:

public String toStringValidate(){
        return new ToStringBuilder(this,ToStringStyle.JSON_STYLE).append("consentDate",consentDate).append("source",source).append("status",status)
                .append("retailerCode",retailerCode).append("retailerAccess",retailerAccess).append("recipient",recipient).append("recipientType",recipientType)
                .append("type",type).toString();
    }

解决方法

当你这样做时:

.append("consentData",consentData.toStringValidate())

append 而言,附加的值是一个字符串,因此必须进行转义。无法知道它实际上是一个 JSON 值并且可以“原始”插入。

如果你想要 JSON,我会使用一个真正的 JSON 库,例如格森。

如果您只需要一个字符串,该字符串对于其成员具有不同值的对象是唯一的,您可以这样做:

public String toStringValidate() {
            return new ReflectionToStringBuilder(this,new RecursiveToStringStyle() {
                {
                    setUseIdentityHashCode(false);
                }
            }).build();
        }