[英]Deserialize JSON to Map<String,String> using jackson databind
我在Web應用程序中使用spring 4.0.5.RELEASE
和jackson-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.