Java Spring resttemplate字符编码的问题
我使用JavaSpringRESTTemplate通过get请求获取json。我得到的JSON不是特殊字符,而是一些奇怪的东西。所以我猜字符编码有问题。我在网上找不到任何帮助。我现在使用的代码是:Java Spring resttemplate字符编码的问题,java,json,spring,character-encoding,Java,Json,Spring,Character Encoding,我使用JavaSpringRESTTemplate通过get请求获取json。我得到的JSON不是特殊字符,而是一些奇怪的东西。所以我猜字符编码有问题。我在网上找不到任何帮助。我现在使用的代码是: String json = restTemplate.getForObject( overPassStatementPostCode, String.class, params); OverpassStamentPostCode只是一个
String json = restTemplate.getForObject(
overPassStatementPostCode,
String.class,
params);
OverpassStamentPostCode只是一个带有占位符的字符串。它将被参数映射中的参数填充
问题是字符串json没有想要的编码
谢谢你的帮助。
致以最诚挚的问候Daniel您是否尝试过在web.xml中设置编码过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码滤波器
/*
您可以在HttpHeaders
中设置编码。下面的代码可以帮助您:
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("Accept", "text/html;charset=utf-8");
HttpEntity<?> requestEntity = new HttpEntity(requestHeaders);
RestTemplate template = new RestTemplate();
ResponseEntity<String> response = template.exchange(
"http://localhost/hello", HttpMethod.GET, requestEntity,
String.class);
HttpHeaders requestHeaders=新的HttpHeaders();
set(“Accept”,“text/html;charset=utf-8”);
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
RestTemplate=新的RestTemplate();
ResponseEntity response=template.exchange(
"http://localhost/hello,HttpMethod.GET,requestEntity,
字符串(类);
指定一个转换器,该转换器可以从HTTP请求和响应转换为HTTP请求和响应。这里有一个例子
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
升级到SpringWeb5.2解决了这个问题。或者将writeAcceptCharset属性设置为false属于StringHttpMessageConverter,并在RestTemplate实例中进一步使用该转换器
boolean writeAcceptCharSet = false;
List<HttpMessageConverter<?>> c = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> mc : c) {
if (mc instanceof StringHttpMessageConverter) {
StringHttpMessageConverter mcc = (StringHttpMessageConverter) mc;
mcc.setWriteAcceptCharset(writeAcceptCharSet);
}
}
boolean writeAcceptCharSet=false;
列表您可以记录响应标题吗?查找字符编码记录的标题是:{Date=[Mon,2015年1月5日09:23:13 GMT],Server=[Apache/2.2.22(Ubuntu)],Vary=[Accept Encoding],Keep Alive=[timeout=5,max=100],Connection=[Keep Alive],Transfer Encoding=[chunked],Content Type=[application/json]}
从未使用web.xml进行配置。我得读一下。我想我必须把它注册为applicationcontext?谢谢你的帮助,但是像üäöß这样的字符仍然没有正确编码。我现在使用的代码是:HttpHeaders-requestHeaders=newhttpheaders();set(“Accept”,“text/html;charset=utf-8”);HttpEntity requestEntity=新的HttpEntity(requestHeaders);RestTemplate=新的RestTemplate();ResponseEntity json=template.exchange(overPassStatementPostCode,HttpMethod.GET,requestEntity,String.class,params)
将字符集更改为ISO-8859-1
后,您是否可以重试?更改了requestHeaders.set方法中的字符集,但仍然没有成功。记录的标题是:{Date=[Mon,05 Jan 2015 09:23:13 GMT],Server=[Apache/2.2.22(Ubuntu)],Variy=[Accept Encoding],Keep Alive=[timeout=5,max=100],Connection=[Keep Alive],Transfer Encoding=[chunked],Content Type=[application/json]}
在我给出的示例代码中,内容类型是text/html
在您的示例中,它应该是application/json;字符集=ISO-8859-1
。您能确认一下您是否做了这些更改吗?