Java 将JSON键值对映射到HashMap
我试图将json中的一个键值对,Java 将JSON键值对映射到HashMap,java,json,spring-boot,Java,Json,Spring Boot,我试图将json中的一个键值对,recipient\u status映射到一个map对象。除此之外,所有字段都被正确解析。有没有其他方法可以解析键值对 我正在发送以下JSON字符串: { "id": "layer:///messages/940de862-3c96-11e4-baad-164230d1df67", "parts": [ { "id": "layer:///messages/940de862-3c96-11e4-baad-164230d1df67/par
recipient\u status
映射到一个map
对象。除此之外,所有字段都被正确解析。有没有其他方法可以解析键值对
我正在发送以下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启动后端
@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;
}
@数据
公共类消息{
私有字符串id;
私人零件清单;
私有LocalDateTime sentAt;
私有地图接收者状态;
私人多头头寸;
}
您的问题在于收件人状态
,您应该将其更改为收件人状态
。JSON应该与POJO变量名匹配。无需执行特殊操作来创建HashMap
问题可能在于recipientStatus
属性名。消息中的名称与JSON不匹配。有多种方法可以解决此问题:
正如@ddarellis所建议的,在Java类或JSON中重命名属性,以便它们匹配
用@JsonProperty
注释标记Java属性
public class Message {
@JsonProperty("recipient_status")
private Map<String, String> recipientStatus;
}
或者使用JsonNaming
注释
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Message {
private Map<String, String> recipientStatus;
}
@JsonNaming(PropertyNamingStrategy.snakecasestractegy.class)
公共类消息{
私有地图接收者状态;
}
我认为在你的情况下,第三种选择更可取。在这个命名策略中,您已经有了两个属性,添加新字段将更容易,而不必考虑需要添加另一个JsonProperty
。此外,可以为整个应用程序全局设置此策略。如果您不确定此问题,请使用网站检查生成的json类,如下所示:
看什么?json完全是我的生成器,它无法转换json
因此,在这里,您需要更改json片段中的recipient_status部分
建议:
将收件人状态更改为以下状态:
"recipient_status": {
"sent":"layer:///identities/777",
"read":["layer:///identities/999","layer:///identities/1234"],
"delivered":"layer:///identities/111",
}
来自json2csharp.com的生成器将运行良好:
认为您需要对生成的类进行一些更正。
希望对您有所帮助。试试私人地图recipientStatus;尝试将map对象替换为`JsonObject``并查看它是否正确works@vikaskumar,那也不行。recipientStatus保持为null。与您的解决方案相同@mehdimaick。将recipientStatus替换为Object,并检查其是否为null,或者将其替换为Map并再次测试。
"recipient_status": {
"sent":"layer:///identities/777",
"read":["layer:///identities/999","layer:///identities/1234"],
"delivered":"layer:///identities/111",
}