16

我正在使用 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);
}

最后我还尝试了用@ResponseBodywith注释方法return ret;

在这两种情况下,当我点击服务时,我都会得到围绕字符串值的额外引号(例如"This is a test")。我猜这是由于消息转换。这就是为什么我尝试定义Content-Type标题,明确点击 StringHttpMessageConverter,但无济于事。

4

4 回答 4

21

有同样的问题。

只要确保你注册了一个org.springframework.http.converter.StringHttpMessageConverter和你的杰克逊一样,这样字符串就会被逐字处理,而不是试图转换为 JSON(带有额外的引号)。

只需使用您喜欢的 Charset 使用默认构造函数或构造函数进行实例化。应该使用标准内部默认值为您设置媒体类型。如果您通过代码扩展进行配置,WebMvcConfigurerAdapter那么您只需在configureMessageConverters(List<HttpMessageConverter<?>> converters)方法中添加转换器。

于 2013-08-13T22:25:21.903 回答
0

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

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

强制字符串在.transform(Transformers.toJson())URI 中转义,因此只需将其删除 - 它不应该存在 - 修复了问题。

于 2018-10-31T04:36:49.987 回答
0

就我而言,我过度设计 =)

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

class SerializableToString implements Converter<Serializable, String>

限制它(仅限于我的 bean),解决了问题X)

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

于 2017-02-25T17:43:07.957 回答
-1

原来在其中一个导入中注册了一个 JSON 消息转换器。

于 2013-01-12T18:19:06.573 回答