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

Why ToStringBuilder(ToStringStyle.JSON_STYLE) adding quotes before and after object? is it True

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

这是真实的对象:

{
    "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"
    }
} 

这是我的 json来自 class 的对象:

{
"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 class.

这个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值,可以插入'raw'.

如果你想要 JSON,我会使用真正的 JSON 库,例如Gson.

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

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