[英]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.