因为为每个请求创建DTO会很痛苦,所以我将其转换为地图。有没有其他方法可以比这更好地返回JSON?
public @ResponseBody
Map<String, String> myTest() {
Map<String,String> myMap = new HashMap<String, String>();
myMap.put("a", "1");
myMap.put("b", "2");
return myMap;
}
答案 0 :(得分:1)
我会说更好地使用DTO并让Spring / Jackson照顾所有的JSon,这是一个例子
@RequestMapping(value = "/payments", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<Payment> batchCreate(@RequestBody List<Payment> payments) {
return paymentService.create(payments);
}
将Jackson添加到类路径
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.0</version>
</dependency>
希望这有帮助。
或者创建自己的序列化程序
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
public @ResponseBody String get() throws JsonProcessingException {
SpecialMap map = new SpecialMap();
map.put("firstName", "Noby");
map.put("lastName", "Stiles");
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(SpecialMap.class, new MapSerializer());
mapper.registerModule(module);
String serialized = mapper.writeValueAsString(map);
return serialized;
}
public class MapSerializer extends JsonSerializer<SpecialMap> {
@Override
public void serialize(SpecialMap map, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeStartObject();
for (String key : map.keySet()) {
jgen.writeStringField(key, map.get(key));
}
jgen.writeEndObject();
}
}
public class SpecialMap extends HashMap<String,String> {
}
答案 1 :(得分:1)
如果你可以直接使用你的实体,你也可以这样做。你需要杰克森的一些额外功能。
对于过滤我创建了一个小杰克森插件,允许动态过滤。可能它会有所帮助: