[英]Should Spring Rest Service return Map rather than a DTO for JSON
因为为每个请求创建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;
}
我会说最好使用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> {
}
如果您可以直接使用实体,也可以这样做。 不过,您将需要在jackson中添加一些其他功能。
对于过滤,我创建了一个小杰克逊插件,可以进行动态过滤。 可能可以帮助:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.