joh*_*ohn 3 rest grails character-encoding
我正在使用外部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)
def gamesJson = JSON.parse(response.getBody())
//...
//parse value from gamesJson
//...
return testValue
}
Run Code Online (Sandbox Code Playgroud)
根据我之前的回答:
您只需要添加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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6512 次 |
| 最近记录: |