2013-01-12 48 views
5

我正在使用Spring 3.1,並且我有一個應返回字符串值的處理程序。 這裏是我的處理程序看起來像:Spring MVC處理程序返回帶額外引號的字符串

@RequestMapping(value = TEST_HANDLER_PATH, method = RequestMethod.POST) 
public ResponseEntity<String> handleTest(HttpServletRequest request, 
    @RequestParam("parma1") String param) throws Exception { 
    String ret = ... 
    ... 
    HttpHeaders headers = new HttpHeaders(); 
    headers.add("Content-Type", "text/plain;charset=utf-8"); 
    return new ResponseEntity<String>(ret, headers, HttpStatus.CREATED); 
} 

我也試過註釋方法與@ResponseBodyreturn ret;末。

在這兩種情況下,當我打這個服務時,我會在字符串值附近得到額外的引號(例如"This is a test")。 我猜這是由於消息轉換。這就是爲什麼我試圖定義Content-Type標題,明確命中StringHttpMessageConverter,無濟於事。

回答

-2

原來在其中一個導入中註冊了JSON消息轉換器。

+1

您是否刪除了JSON消息轉換器?如果你不想刪除消息轉換器怎麼辦? –

+0

您可以在請求/響應頭中使用相應的MIME類型來定位特定的轉換器。看看引擎蓋下的是什麼幫助我。 – cbaby

7

有同樣的問題。

只要確保您註冊一個org.springframework.http.converter.StringHttpMessageConverter以及您的傑克遜一個,以便字面處理字面,而不是試圖轉換爲JSON(帶有額外的引號)。

只用初始化的構造函數或構造函數用你喜歡的字符集實例化。媒體類型應該使用標準的內部默認值爲您設置。如果您通過代碼擴展WebMvcConfigurerAdapter進行配置,那麼您只需在configureMessageConverters(List<HttpMessageConverter<?>> converters)方法中添加轉換器。

+0

這對我有用。 在任何其他轉換器之前,必須將'StringHttpMessageConverter'添加到'List >。當您明確配置它們時,順序很重要 –

0

就我而言,我不得不過度設計=)

採用了一個轉換器bean的toString操作是這樣的:

class SerializableToString implements Converter<Serializable, String> 

限制是(只對我的豆),解決問題X)

注:用一個斷點調試@org.springframework.core.convert.support.GenericConversionService.getConverter幫助。

相關問題