【问题标题】:Java JSON writes doubleJava JSON 写入双倍
【发布时间】:2024-01-13 08:22:01
【问题描述】:

我正在尝试使用下面的代码将 java 对象反序列化为 JSON 对象,并且我发现以大写开头的参数已被写入双倍。例如;

Request req = new Request();
req.setMAC("abcdef");
req.setMACParams("term:id:orderno");
req.setOrderNo("999xdef123");

final ObjectMapper mapper = new ObjectMapper(); 

String json = mapper.writeValueAsString(req);

json字符串内部:

{ "MAC":"abcdef","MACParams":"term:id:orderno","OrderNo":"999xdef123","mac":"abcdef","macparams":"term:id:orderno","orderno":"999xdef123" }

那么我应该怎么做才能防止这种双重密码呢?

【问题讨论】:

  • hmm java 区分大小写,MACmac 不同...不知道问题是什么...
  • 发布一个完整的最小示例来重现该问题。如果您不发布,我们将看不到您的代码。而且您发布的那几行代码甚至都不是有效的 Java 代码。
  • 我不允许发布机密代码,所以我放了一个示例代码。我认为我的问题很容易理解,不管它是否有效,因为它很简单,但我已经解决了。

标签: java json double writing


【解决方案1】:

由于字段属性名称中使用了大写字母,会出现此问题。 只需在 Request 类的每个字段中使用 @JsonProperty 注释,然后它将仅反序列化为给定名称。

例如:

class Request{
    @JsonProperty("MAC")
    private String mac;

}

【讨论】:

    【解决方案2】:

    你的类 Request 中有 getter 和 setter,但是这些 getter 不遵循 java bean 规则, getMAC 和 setMAC 的“MAC”字段是正确的,但“getMac”会在结果中生成两次 mac。

    【讨论】: