如何使用spring mvc处理任意json对象?

时间:2010-12-09 09:26:16

标签: java json spring-mvc

我成功地将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} ;.我如何配置我的方法?

干杯,

2 个答案:

答案 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);
    }