2010-10-22 55 views
0

在我的web应用程序中,我所有的消息转换器都已到位,如果我在下面更改getContent以返回一个bean/pojo,它会以“application/json; charset = UTF-8“,这是预期的,但我现在想要”按原样“服务JSON。从Spring控制器使用内容谈判服务JSON“原样”

E.g.我有一个简单的存根Web服务,用户可以将PUT一个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; 
    } 

} 

然而,吸气剂返回报头 “内容类型:文本/ HTML;字符集= UTF-8” 如果我叫在浏览器http://host/stub/123.json。我猜这是因为我没有返回任何被Jackson转换器“转换”的东西,因此返回的头文件没有被修改。

我需要它是应用程序/ json - 任何想法该怎么办?也许我可以指定返回标题的注释?

回答

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