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); } }