代码之家  ›  专栏  ›  技术社区  ›  opyate

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

  •  0
  • opyate  · 技术社区  · 14 年前

    E、 g.我有一个简单的存根web服务,用户可以用它把一个持久化的JSON内容blob放在某个地方,然后用一个等价的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 在浏览器中。我猜这是因为我没有返回任何被Jackson转换器“转换”的内容,因此返回头没有被修改。

    我需要它是application/json——有什么办法吗?也许是一个注释,我可以用它指定返回头?

    1 回复  |  直到 14 年前
        1
  •  0
  •   opyate    14 年前

    我设法通过在get content()方法中添加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);
        }