Spring mvc SpringMVC处理程序返回带额外引号的字符串
我使用的是Spring3.1,我有一个应该返回字符串值的处理程序。 下面是我的处理程序的外观: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
@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中。