手动使用对象映射器从rest控制器返回json

时间:2016-01-20 12:01:30

标签: json spring objectmapper

我有一个休息控制器返回一个json对象列表。当我调用方法1)时,它按要求工作。 当我需要配置序列化来忽略一个请求中的某些属性而不是另一个请求时,我使用的是mixIn annotation和objectMapper。当我返回对象时,它像以前一样在xml而不是json中。有人可以帮忙吗?我意识到我现在正在返回一个字符串,但如果我想要与1)相同的respose,我是否需要将字符串转换为对象并像以前一样在responseEntity中返回。

1)

@RequestMapping(value = "/search", method = RequestMethod.POST) 
public ResponseEntity<List<MyObject>> search(@RequestBody SearchParams searchParams){
  List<MyObject> result = myService.find(searchParams);
  return new ResponseEntity<List<MyObject>(result, HttpStatus.OK);
}

返回

[
  {"prop1":"val1", "prop2":"val2"},
  {"prop1":"val3", "prop2":"val4"}
]

2)

 @RequestMapping(value = "/search", method = RequestMethod.POST)
public ResponseEntity<String> search(@RequestBody SearchParams searchParams){  
  List<MyObject> result = myService.find(searchParams);
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.getSerializationConfig().addMixInAnnotations(MyObject.class, MyObjectFilter.class);
  String json = objectMapper.writeValueAsString(result);
  return new ResponseEntity<String>(json, HttpStatus.OK);
}

返回

<data contentType="text/plain;charset=ISO-8859-1" contentLength="*"><![CDATA[
[
  {"prop1":"val1", "prop2":"val2"},
  {"prop1":"val3", "prop2":"val4"}
]
]]></data>

这出现在soapui而不是json选项卡的xml选项卡中。可以帮忙吗?

0 个答案:

没有答案