简体   繁体   English

响应字符集不正确

[英]Incorrect charset of response

I wrote a method that should return valid body as string type in utf-8, but after making a request I get the response in utf-16.我写了一个方法,应该在 utf-8 中返回有效正文作为字符串类型,但是在发出请求后,我得到了 utf-16 中的响应。 The content-type header in postman is application/json. postman中的内容类型header是application/json。 I searched the stackoverflow for any possible way to resolve it, but any solution doesn't helped me, including this topic(. How I can change it to get valid body? Thanx!我在stackoverflow上搜索了任何可能的解决方法,但任何解决方案都没有帮助我,包括这个主题(。我如何改变它以获得有效的身体?谢谢!

Headers, that i've got on response:
{Date=[Mon, 13 Apr 2020 19:13:38 GMT], Content-Type=[application/json; charset=utf-16], Server=[Kestrel], Transfer-Encoding=[chunked]}
    @PostMapping("/updateValues")
    public String getUpdateValuesRequest(@RequestParam(value = "secret") String secret,
                                         @RequestHeader HttpHeaders requestHeaders,
                                         @RequestBody String requestBody){
        return getUpdateValuesResponse(secret, requestHeaders, requestBody);
    }

    public String getUpdateValuesResponse(String secret, HttpHeaders requestHeaders, String requestBody) {
        String updateValuesUrl = "http://myservice.com/chunk/updateValues?secret={secret}";
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        HttpEntity<String> entity = new HttpEntity<String>(requestBody, requestHeaders);
        ResponseEntity<String> response = restTemplate.exchange(updateValuesUrl, HttpMethod.POST, entity, String.class, secret);
        if (response.getStatusCode() == HttpStatus.OK) {
            logger.info("Request Successful.");
        } else {
            logger.info("Request Failed");
        }
        logger.info(response.getHeaders().toString());
        logger.info(response.getStatusCode().toString());
        logger.info("StatusCodeValue: " + response.getStatusCodeValue());
        logger.info(response.getBody());
        logger.info(response.getClass().toString());
        return response.getBody();
    }

The problem was solved by setting setWriteAcceptCharset(false) for stringHttpMessageConverter.通过为 stringHttpMessageConverter 设置 setWriteAcceptCharset(false) 解决了该问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM