我成功地将spring-mvc与json一起使用,以便在域对象和json对象之间进行转换。
现在,我想编写一个只接受任何json的Controller,验证它并以紧凑的可序列形式为服务层提供它。 (json字符串就足够了,任何紧凑的字节数组表示都更好)。我目前的approch是这样的:
@RequestMapping(value="/{key}", method=RequestMethod.GET)
@ResponseBody
public Object getDocument(@PathVariable("username") String username,
@PathVariable("key") String key,
HttpServletRequest request,
HttpServletResponse response) {
LOGGER.info(createAccessLog(request));
Container doc = containerService.get(username, key);
return jacksonmapper.map(doc.getDocument(), Map.class);
}
和
@RequestMapping(value="/{key}", method=RequestMethod.PUT)
public void putDocument(@PathVariable("username") String username,
@PathVariable("key") String key,
@RequestBody Map<String,Object> document,
HttpServletRequest request,
HttpServletResponse response) {
LOGGER.info(createAccessLog(request));
containerService.createOrUpdate(username, key,document);
}
请注意,这种方法不起作用,因为我不想在put方法中使用Map,而get方法只返回{“this”:null} ;.我如何配置我的方法?
干杯,
扬
答案 0 :(得分:2)
Spring自动拥有此功能。您只需要在类路径上使用<mvc:annotation-driven />
和jackson。然后,spring将通过JSON映射器处理所有请求,其中accept标头设置为*/json
,并且相应的响应。
答案 1 :(得分:0)
很容易。您不需要@RequestBody
注释。
@RequestMapping(value="/{key}", method=RequestMethod.PUT)
public void putDocument(@PathVariable("username") String username,
@PathVariable("key") String key, HttpServletRequest request, HttpServletResponse response) {
try {
String jsonString = IOUtils.toString(request.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
LOGGER.info(createAccessLog(request));
containerService.createOrUpdate(username, key,document);
}