【发布时间】:2014-01-23 00:44:10
【问题描述】:
我正在使用 Spring Boot 构建 Spring MVC 服务,并希望能够以 UTF-8 编码的纯文本形式返回字符串。在this description之后,我认为唯一需要的是添加bean方法
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(new MediaType("text", "plain", Charset.forName("UTF-8"))));
return converter;
}
但是root方法在
@Controller
public class RootController {
@RequestMapping(value="/"/*, produces="text/plain;charset=UTF-8"*/)
@ResponseBody
public String root() {
return "æøå";
}
}
以 ISO-8859-1 代替 UTF-8 响应字符串 æøå,除非我取消注释 produces 部分,在这种情况下它实际上返回 UTF-8。消息转换器在这里似乎没有任何作用。
在this approach 之后,我确认该bean 已实际注册。除了这个bean,我还注册了EmbeddedServletContainerFactory 和CharacterEncodingFilter,如another question 中所述,尽管我认为这与这里无关。
有人能解释一下注册的HttpMessageConverter实际上做了什么,以及如何让@ResponseBody-annotated控制器方法返回UTF-8,而不必每次都提供produces吗?
编辑
正如 cmets 中所讨论的,为了使接受的答案正常工作,我必须将 Spring Boot 的版本从 0.5.0.M6 升级到 0.5.0.BUILD-SNAPSHOT,并且为了防止输出垃圾标题,请在 @987654337 上调用 converter.setWriteAcceptCharset(false) @。
【问题讨论】:
标签: spring spring-mvc utf-8 spring-boot