RestTemplate设置UTF-8编码解决调用外部第三方接口返回值json串中文乱码问题

RestTemplate设置UTF-8编码解决调用外部第三方接口返回值json串中文乱码问题

import com.alibaba.fastjson.JSON;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.List;

@RestController
public class ConsumerController {

    RestTemplate restTemplate = new RestTemplate();

    @GetMapping("/consumer")
    public void consumer() {
//        String hi = feignHelloController.hi();
//        System.out.println(hi);
        HttpHeaders headers = new HttpHeaders();
        //Public constant media type for application/json;charset=UTF-8.
        headers.add("Content-Type", "application/json; charset=utf-8");
        MyPushRequestVo vo = new MyPushRequestVo();
        vo.setSupplier("1");
        vo.setDxOrderId("hn7790134512");
        vo.setProductState(4);
        vo.setProductId("5379c2bdbb0d4602a5608b48382848a6");
        //当前结算时间就是已经使用完成的时间
        vo.setProductStateModifyDate("2025-01-16 15:56:39");
        String req = JSON.toJSONString(vo);
        String resp = restTemplate.postForObject("https://xxx.xx", new HttpEntity<>(req,headers), String.class);
        System.out.println(resp);
    }

    /**
    测试类
    **/
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> messageConverter : messageConverters) {
            if(messageConverter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8);
            } else if(messageConverter instanceof AbstractHttpMessageConverter) {
                ((AbstractHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8);
            } else if(messageConverter instanceof FormHttpMessageConverter) {
                ((FormHttpMessageConverter) messageConverter).setCharset(StandardCharsets.UTF_8);
                ((FormHttpMessageConverter) messageConverter).setMultipartCharset(StandardCharsets.UTF_8);
            }
        }

        HttpHeaders headers = new HttpHeaders();
        //Public constant media type for application/json;charset=UTF-8.
        headers.add("Content-Type", "application/json;charset=UTF-8");
        MyPushRequestVo vo = new MyPushRequestVo();
        vo.setSupplier("1");
        vo.setDxOrderId("hn7790134512");
        vo.setProductState(4);
        vo.setProductId("5379c2bdbb0d4602a5608b48382848a6");
        //当前结算时间就是已经使用完成的时间
        vo.setProductStateModifyDate("2025-01-16 15:56:39");
        String req = JSON.toJSONString(vo);
        System.out.println(req);
        String resp = restTemplate.postForObject("https://xxx.xx", new HttpEntity<>(req,headers), String.class);
        System.out.println(resp);
//        String possibleCharsets[] = {"UTF-8", "GBK", "ISO-8859-1"};
//        for (String charset : possibleCharsets) {
//            try {
//                String decoded = new String(resp.getBytes(), charset);
//                System.out.println("decoded=" + decoded);
//            } catch (UnsupportedEncodingException e) {
//                // 处理异常
//                e.printStackTrace();
//            }
//        }
//
//        System.out.println(resp);
    }
}

关键代码:

RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> messageConverter : messageConverters) {
            if(messageConverter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8);
            } else if(messageConverter instanceof AbstractHttpMessageConverter) {
                ((AbstractHttpMessageConverter) messageConverter).setDefaultCharset(StandardCharsets.UTF_8);
            } else if(messageConverter instanceof FormHttpMessageConverter) {
                ((FormHttpMessageConverter) messageConverter).setCharset(StandardCharsets.UTF_8);
                ((FormHttpMessageConverter) messageConverter).setMultipartCharset(StandardCharsets.UTF_8);
            }
        }

 

posted on 2025-03-03 18:37  oktokeep  阅读(319)  评论(0)    收藏  举报