restTemplat发post请求报错Content type ‘application/xml;charset=UTF-8‘ not supported“

简介: restTemplat发post请求报错Content type ‘application/xml;charset=UTF-8‘ not supported“


背景:

本人发送post请求,报错{"result":"FAILED","timestamp":"1634171535020","errorMessage":"Content type 'application/xml;charset=UTF-8' not supported"}

看了下,请求头没问题的,另辟蹊径,用其他方式代替,暂时避免了这个问题的发生。

解决方式1:自己封装http的post请求

/**
 * @author hfl
 */
public class HttpUtil {
    private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
    private static final CloseableHttpClient httpClient;
    static {
        RequestConfig config =
                RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(15000).build();
        httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
    }
    public static String sendPostJson(String url, JSONObject msg) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("content-type", "application/json");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            log.info("param:{}",msg);
            out.print(msg);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

使用

String s1 = HttpUtil.sendPostJson(addScheduleUrl, (JSONObject) JSON.toJSON(request));

成功返回。

解决方式2:使用resttemplate的exchange,指定请求头的content-Type

RestTemplate template = new RestTemplate();
URI uri = UriComponentsBuilder.fromUriString(addScheduleUrl).build().toUri();
 // 自定义body实体类
 String s3 = JSON.toJSONString(request);
 RequestEntity<String> requestEntity = RequestEntity.post(uri)
         .accept(MediaType.APPLICATION_JSON)
         .header("Content-Type", "application/json")
         .body(s3);
 ResponseEntity<String> exchange = restTemplate.exchange(requestEntity, String.class);
 String body = exchange.getBody();
 System.out.println(JSON.parseObject(body).toJSONString());

返回正常结果:


大功告成!!!

相关文章
|
6月前
|
XML JavaScript 数据格式
打开 XML 文件报错 There is no Unicode byte order mark
打开 XML 文件报错 There is no Unicode byte order mark
|
3月前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
52 2
|
26天前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
257 0
|
XML JSON 人工智能
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
Error while extracting response for type [class xxx] and content type application/xml;charset=UTF-8
1042 0
|
5月前
|
运维 安全 Java
阿里云云效操作报错合集之maven的setting.xml 上,本地拉取时,报401问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4月前
|
XML JavaScript 数据格式
【Python】已解决:(Python xml库 import xml.dom.minidom导包报错)‘No module named dom’
【Python】已解决:(Python xml库 import xml.dom.minidom导包报错)‘No module named dom’
75 0
|
6月前
|
Java Spring
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
298 0
|
6月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
1284 1
|
6月前
|
XML JSON 数据格式
xml文档解析报错解决办法
xml文档解析报错解决办法
|
6月前
|
XML Java 数据格式
javaweb实训第五天下午——xml配置文件约束报错问题
问题描述: 如果电脑连不上网,或者网速不好可能会造成Spring框架中xml配置文件出现错误。但是这个错误不影响项目的运行的;
61 0