2010-10-22 56 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); 
    }