Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring resttemplate字符编码的问题_Java_Json_Spring_Character Encoding - Fatal编程技术网

Java Spring resttemplate字符编码的问题

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只是一个

我使用JavaSpringRESTTemplate通过get请求获取json。我得到的JSON不是特殊字符,而是一些奇怪的东西。所以我猜字符编码有问题。我在网上找不到任何帮助。我现在使用的代码是:

        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
。您能确认一下您是否做了这些更改吗?