我正在使用外部REST服务,它提供所有内容为UTF-8编码.
由于某种原因,我的应用程序无法正确处理响应.如果我拒绝回复,我会选择LuleÃ¥(应该是Luleå).
编辑:如果我转发(不改变)字符串到UI,同样的行为发生,例如:
flash.message = "Test" + integrationService.testEncoding()
Run Code Online (Sandbox Code Playgroud)
我所做的是在/ script文件夹中创建一个_Events.groovy文件并指定它
eventConfigureTomcat = { tomcat ->
tomcat.connector.URIEncoding = "UTF-8"
tomcat.connector.useBodyEncodingForURI = true
}
Run Code Online (Sandbox Code Playgroud)
我也有以下内容Config.groovy:
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
Run Code Online (Sandbox Code Playgroud)
但这没有改变.答案仍然错误地显示出来.我不确定这是Grails的配置问题,嵌入式tomcat还是其他东西.我目前正在Windows 7上运行我的测试设置,但同样的问题发生在我在Centos上运行的服务器上.请指教.
编辑2:如果我使用curl使用REST服务,则在输出中正确呈现所有内容.
编辑3:我正在使用org.springframework.web.client.RestTemplate并HttpComponents使用该服务:
private static final HttpHeaders requestHeaders
static{
requestHeaders = new HttpHeaders()
requestHeaders.set(HttpHeaders.CONTENT_TYPE, "application/json")
requestHeaders.set(HttpHeaders.ACCEPT, "application/json")
requestHeaders.set("Accept-Encoding", "gzip")
}
private final static RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(
HttpClientBuilder.create().build()))
...
...
public def testEncoding(){
ResponseEntity<String> response = restTemplate.exchange(
"https://www.url.com", HttpMethod.GET, new HttpEntity<Object>(requestHeaders),
String.class) …Run Code Online (Sandbox Code Playgroud)