繁体   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