我正在使用Spring 3.1,我有一个应该返回String值的处理程序。 这是我的处理程序的样子:
@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);
}
我还尝试使用@ResponseBody
注释方法,最后添加return ret;
。
在这两种情况下,当我点击服务时,我会在String值附近获得额外的引号(例如"This is a test"
)。
我猜这是由于邮件转换。这就是为什么我尝试定义Content-Type
标头,明确命中StringHttpMessageConverter,无济于事。
答案 0 :(得分:12)
有同样的问题。
请确保您注册了org.springframework.http.converter.StringHttpMessageConverter
以及您的Jackson,以便字面意义上的字符串被处理,而不是尝试转换为JSON(带有额外的引号)。
使用您首选的Charset实例化默认构造函数或构造函数。应使用标准内部默认值为您设置媒体类型。如果您通过扩展WebMvcConfigurerAdapter
的代码进行配置,那么只需使用configureMessageConverters(List<HttpMessageConverter<?>> converters)
方法添加转换器。
答案 1 :(得分:0)
就我而言,我过度设计 =)
为bean的toString
操作引入了一个转换器,如下所示:
class SerializableToString implements Converter<Serializable, String>
限制(仅限我的bean),解决了问题 X)
注意:使用断点@ org.springframework.core.convert.support.GenericConversionService.getConverter
进行调试有帮助。
答案 2 :(得分:0)
在一个相关场景中,我有一个IntegrationFlow
的{{1}}错误地请求了转换。基本上,目标服务将收到GET
作为引号转义字符串
@PathVariable
return IntegrationFlows.from("getThing")
.transform(Transformers.toJson())
.handle(
迫使字符串在URI中转义,因此只需删除它-不应该存在-即可解决此问题。
答案 3 :(得分:-2)
原来在其中一个导入中注册了JSON消息转换器。