[英]Mapping a JSON key value pair to HashMap
我試圖將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;
}
您的問題在於recipient_status
,您應該將其更改為recipientStatus
。 您的JSON應與POJO變量名稱匹配。 無需做一些特殊的事情來制作HashMap
。
問題可能在於recipientStatus
屬性名稱。 Message
對象中的名稱與JSON之間沒有匹配項。 有多種方法可以解決此問題:
正如@ddarellis建議的那樣,在Java類或JSON中重命名屬性,以便它們匹配。
使用@JsonProperty
注釋標記Java屬性
public class Message { @JsonProperty("recipient_status") private Map<String, String> recipientStatus; }
通過修改ObjectMapper
將反序列化器上的PropertyNamingStrategy
設置為SNAKE_CASE
new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
或者使用JsonNaming
注釋
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class Message { private Map<String, String> recipientStatus; }
我認為在你的情況下,第三種選擇更可取。 您已經在此命名策略中擁有兩個屬性,並且在不考慮您需要添加另一個JsonProperty
情況下添加新字段會更容易。 此外,可以針對整個應用程序全局設置此策略。
如果您不確定該問題,請使用http://json2csharp.com/ website檢查生成的json類,如下所示:
看什么? json完全支持我的生成器,它無法轉換json。
所以在這里,您需要更改json片段中的recipient_status部分。
建議:
將recipient_status更改為以下內容:
"recipient_status": {
"sent":"layer:///identities/777",
"read":["layer:///identities/999","layer:///identities/1234"],
"delivered":"layer:///identities/111",
}
認為您需要對生成的類進行一些修正。 希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.