gpt4 book ai didi

java - 将 JSON 键值对映射到 HashMap

转载 作者:行者123 更新时间:2023-12-02 08:48:08 25 4
gpt4 key购买 nike

我正在尝试映射 json 中的键值对,recipient_status下面,到Map<String, String>目的。所有字段都得到正确解析,除了这个字段。还有其他方法可以解析键值对吗?

我正在发送以下 JSON 字符串:

{
"id": "layer:///messages/940de862-3c96-11e4-baad-164230d1df67",
"parts": [
{
"id": "layer:///messages/940de862-3c96-11e4-baad-164230d1df67/parts/0",
"mime_type": "text/plain",
"body": "This is the message."
}
],
"sent_at": "2014-09-09T04:44:47+00:00",
"recipient_status": {
"layer:///identities/777": "sent",
"layer:///identities/999": "read",
"layer:///identities/111": "delivered",
"layer:///identities/1234": "read"
},
"position": 120709792
}

到我的 Java Sprint Boot 后端

@RequestMapping(method = RequestMethod.POST, value = "/")
public String conversationCreated(@RequestBody Message message) {
}

并尝试将其解析为以下对象:

@Data
public class Message {
private String id;

private List<Part> parts;

private LocalDateTime sentAt;

private Map<String, String> recipientStatus;

private Long position;
}

最佳答案

问题可能出在 recipientStatus 属性名称上。 Message 对象中的名称与 JSON 不匹配。有多种方法可以解决这个问题:

  1. 按照 @ddarellis 的建议,在 Java 类或 JSON 中重命名属性,以便它们匹配。

  2. 使用 @JsonProperty 注解标记 Java 属性

    public class Message {
    @JsonProperty("recipient_status")
    private Map<String, String> recipientStatus;
    }
  3. 通过修改 ObjectMapper 将解串器上的 PropertyNamingStrategy 设置为 SNAKE_CASE

    new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

    或者使用JsonNaming注释

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
    public class Message {
    private Map<String, String> recipientStatus;
    }

我认为在你的情况下第三个选项更好。您在此命名策略中已经有两个属性,并且添加新字段会更容易,而无需考虑需要添加另一个 JsonProperty。此外,可以为整个应用程序全局设置此策略。

关于java - 将 JSON 键值对映射到 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com