joh*_*ohn 3 rest grails character-encoding
我正在使用外部REST服务,它提供所有内容为UTF-8编码.
由于某种原因,我的应用程序无法正确处理响应.如果我拒绝回复,我会选择LuleÃ¥(应该是Luleå).
编辑:如果我转发(不改变)字符串到UI,同样的行为发生,例如:
flash.message = "Test" + integrationService.testEncoding()
我所做的是在/ script文件夹中创建一个_Events.groovy文件并指定它
eventConfigureTomcat = { tomcat ->
    tomcat.connector.URIEncoding = "UTF-8"
    tomcat.connector.useBodyEncodingForURI = true
}
我也有以下内容Config.groovy:
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
但这没有改变.答案仍然错误地显示出来.我不确定这是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)
    def gamesJson = JSON.parse(response.getBody())
    //...
    //parse value from gamesJson
    //...
    return testValue
}
根据我之前的回答:
您只需要添加StringHttpMessageConverter到模板的消息转换器:
RestTemplate template = new RestTemplate();
template.getMessageConverters()
        .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
ResponseEntity<Object> response = template.exchange(endpoint, method, entity, 
                                                    Object.class);
| 归档时间: | 
 | 
| 查看次数: | 6512 次 | 
| 最近记录: |