Spring mvc SpringMVC处理程序返回带额外引号的字符串

Spring mvc SpringMVC处理程序返回带额外引号的字符串,spring-mvc,Spring Mvc,我使用的是Spring3.1,我有一个应该返回字符串值的处理程序。 下面是我的处理程序的外观: @RequestMapping(value = TEST_HANDLER_PATH, method = RequestMethod.POST) public ResponseEntity<String> handleTest(HttpServletRequest request, @RequestParam("parma1") String param) throws Except

我使用的是Spring3.1,我有一个应该返回字符串值的处理程序。 下面是我的处理程序的外观:

@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);
}
@RequestMapping(value=TEST\u HANDLER\u PATH,method=RequestMethod.POST)
公共响应handleTest(HttpServletRequest,
@RequestParam(“parma1”)字符串参数)引发异常{
字符串ret=。。。
...
HttpHeaders=新的HttpHeaders();
添加(“内容类型”、“文本/普通;字符集=utf-8”);
返回新的ResponseEntity(ret、headers、HttpStatus.CREATED);
}
我还尝试了用
@ResponseBody
return-ret注释方法在末尾

在这两种情况下,当我点击服务时,我会得到字符串值周围的额外引号(例如,
“这是一个测试”
)。
我猜这是由于信息转换。这就是为什么我试图定义
内容类型
头,以显式地点击StringHttpMessageConverter,但没有成功。

结果发现在其中一个导入中注册了一个JSON消息转换器。

也有同样的问题

只需确保您注册了一个
org.springframework.http.converter.StringHttpMessageConverter
,以及您的Jackson,这样字符串就可以按字面意思处理,而不会试图转换为JSON(带额外引号)

只需使用默认构造函数或使用首选字符集的构造函数实例化即可。应使用标准内部默认设置为您设置媒体类型。如果您是通过代码扩展
WebMVCConfigureAdapter
进行配置,那么您只需在
configureMessageConverters中添加转换器(列表在我的情况下,我过度设计了=)

为bean的
toString
操作引入了一个转换器,如下所示:

class SerializableToString implements Converter<Serializable, String>
类SerializableToString实现转换器
将其限制(仅限于我的bean),解决了问题X)


注意:使用断点调试@
org.springframework.core.convert.support.GenericConversionService.getConverter
有帮助。

在一个相关场景中,我有一个
GET
IntegrationFlow
错误地请求了转换。基本上,目标服务将以引号转义字符串的形式接收
@PathVariable

        return IntegrationFlows.from("getThing")
        .transform(Transformers.toJson())
        .handle(

.transform(Transformers.toJson())
强制在URI中转义字符串,因此只需删除它(它本不应该在那里)即可修复该问题

您是否删除了JSON消息转换器?如果不想删除消息转换器,该怎么办?可以使用请求/响应头中相应的MIME类型将特定转换器作为目标。看看引擎盖下面是什么帮助了我。这对我很有用。另外,必须将
StringHttpMessageConverter
添加到
列表中。谢谢你们。秩序确实重要。如果使用的是
extendMessageConverter
,则需要将
StringHttpMessageConverter
显式添加到索引0中。