【发布时间】:2014-03-11 16:18:17
【问题描述】:
我有以下控制器:
@RequestMapping(value = "/test/inst/", method = RequestMethod.POST)
public @ResponseBody ResponseDTO<InstDTO>
testPostREST(@RequestBody RequestDTO<InstDTO> instDTO) {
RequestDTO<InstDTO> dto = new RequestDTO<InstDTO>();
ResponseDTO<InstDTO> responseDto = new ResponseDTO<InstDTO>();
responseDto.setPayload(instDTO.getPayload());
return responseDto;
}
使用以下请求对象:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class RequestDTO<T> {
private List<T> payload;
public RequestDTO() {
System.out.println("constructor");
}
public RequestDTO(List<T> payload) {
this.payload = payload;
}
public List<T> getPayload() {
return payload;
}
public void setPayload(List<T> payload) {
this.payload = payload;
}
}
当 POST 通过并且我查看我得到的对象时,有效负载列表具有 LinkedHashMap 对象,而不是我的 DTO 类型的对象。
如何让 spring+jackson 将 JSON 转换为我的 DTO 对象。请记住,我计划将包装器 ResponseDTO 重用于其他对象列表,这就是我使用通用列表 (List) 的原因。
这是我正在尝试的 JSON。
{
"payload": [
{
"d": "Test 0",
"id": "abcde",
"c": "Test 0"
},
{
"d": "Test 1",
"id": "123",
"c": "Test 1"
}
]
}
【问题讨论】:
-
你使用的是哪个 Spring 版本?
-
我相信这将在 Spring 3.1+ 中开箱即用。
-
无法升级到 3.1 怎么办?我知道升级听起来微不足道,但这是我无法控制的。
-
下面的答案似乎很合适。
-
毕竟我能够进行升级。我必须升级到 Spring 3.2 才能工作,并将 Jackson 从 1.9.1 升级到 1.9.2。似乎现在可以工作了。
标签: java json spring rest jackson