使用jackson databind </string,string>将JSON反序列化为Map <string,string>

时间:2015-03-02 10:42:52

标签: java spring rest jackson

我在我的网络应用程序中使用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数组反序列化到地图上。 我从来没有进入控制器的保存方法。 尝试了一些注释,如@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 ...
}
}

2 个答案:

答案 0 :(得分:1)

我看到了两个问题的解决方案:

希望它可以帮到你, 亨利

答案 1 :(得分:0)

在JSON中,parameters不是对象,而是对象数组:

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

您无法在

上映射此内容
Map<String, String> parameters;

至少使用

List<Map<String, String>> parameters;