使用内容协商从Spring控制器“按原样”提供JSON

时间:2010-10-22 14:20:34

标签: json spring-mvc

在我的webapp中,我的所有消息转换器都已到位,如果我更改下面的getContent以返回bean / pojo,它将返回“application / json; charset = UTF-8”,这是预期的,但我现在想“按原样”提供JSON。

E.g。我有一个简单的存根Web服务,用户可以使用该服务提供一些持久存储的JSON内容,然后进行等效的GET调用以将其读回。

@Controller
public class StubController {

    @Autowired
    @Qualifier("keyValueStore")
    private KVStore kv;

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.GET)
    public @ResponseBody
    String getContent(@PathVariable("id") final String id) {
        return kv.get(id);
    }

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.PUT)
    public String putContent(@PathVariable("id") final String id, @RequestBody String body) {
        kv.set(id, body);
        return "redirect:/stub/"+id;
    }

}

但是,如果我在浏览器中调用http://host/stub/123.json,则getter会返回标题“Content-Type:text / html; charset = UTF-8”。我猜这种情况发生的原因是因为我没有返回任何被Jackson转换器“转换”的内容,因此返回标头不会被修改。

我需要它成为application / json - 任何想法该怎么做?也许是一个我可以指定返回标题的注释?

1 个答案:

答案 0 :(得分:0)

我设法通过在我的getContent()方法中添加一个HttpServletResponse参数并直接设置内容类型来解决这个问题。

http://forum.springsource.org/showthread.php?t=97140

    @RequestMapping(value = "/stub/{id}", method = RequestMethod.GET)
    public @ResponseBody String getContent(@PathVariable("id") final String id, HttpServletResponse response) {
        response.setContentType("application/json");
        return kv.get(id);
    }