Spring MVC处理程序返回带有额外引号的String

时间:2013-01-12 12:48:18

标签: spring-mvc

我正在使用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,无济于事。

4 个答案:

答案 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消息转换器。