簡體   English   中英

將JSON反序列化為Map <String,String> 使用傑克遜數據綁定

[英]Deserialize JSON to Map<String,String> using jackson databind

我在Web應用程序中使用spring 4.0.5.RELEASEjackson-databind 2.2.3 發送此JSON時:

{"keyField1":"57579","keyField2":"sdf","someField":"sdasd","parameters":[{"parameterName":"dfgdfg","parameterValue":"sdf"},{"parameterName":"erwer","parameterValue":"sdfsdf"}]}

到控制器,我得到的只是瀏覽器上的HTTP 400 Bad Request ,我在本地Websphere日志上看不到任何錯誤,但是經過一些測試,我發現問題在於將JSON數組反序列化到地圖上。 我從不進入控制器的save方法。 嘗試了一些注釋,例如@JsonDeserialize(as=HashMap.class)但未成功。 我該如何解決?

我的POJO:

class MyClassId implements Serializable {
private static final long serialVersionUID = 5022985493208399875L;
String keyField1;
String keyField2;
}

@Entity
@IdClass(MyClassId.class)
public class MyClass {
@Id
String keyField1;

@Id
String keyField2;

String someField;

@ElementCollection
@MapKeyColumn(name="parameterName")
@Column(name="parameterValue", length=400)
Map<String, String> parameters;
... Getters and Setters ...

我的控制器:

@RestController
@RequestMapping("/myclass/**")
public class MyClassController {

@Transactional
@RequestMapping(value = "/save", method = RequestMethod.POST, consumes={"application/json"})
public @ResponseBody ServiceResponce<MyClass> save(@RequestBody MyClass processToSave) {
    ... Code ...
}
}

在JSON中, parameters不是對象,而是對象數組:

"parameters":[{"parameterName":"dfgdfg","parameterValue":"sdf"}, ...

您無法將此映射到

Map<String, String> parameters;

至少使用

List<Map<String, String>> parameters;

我看到了兩種解決您的問題的方法:

  • 您可以區分持久於發送回客戶端的表示形式類的實體類。 缺點是您需要在代碼中從實體顯式地創建表示形式

  • 如果您使用Jackson來序列化響應中的響應(JSON,...),則可以利用其功能“自定義序列化器”根據需要調整返回的有效負載的結構。 查看此答案以獲取更多詳細信息:

希望對您有幫助,蒂埃里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM