欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RestTemplate调用请求方式为PATCH的接口

程序员文章站 2022-06-17 19:02:04
问题描述使用 RestTemplate 调用请求方式为PATCH的接口时,报如下错误:java.net.ProtocolException: Invalid HTTP method: PATCH原因分析RestTemplate工厂类(ClientHttpRequestFactory)的默认实现中,不支持使用PATCH方法。解决办法在创建RestTemplate对象时,通过构造方法,将RestTemplate配置类的工厂对象修改为HttpComponentsClientHttpRequestFa...

问题描述

使用 RestTemplate 调用请求方式为PATCH的接口时,报如下错误:

java.net.ProtocolException: Invalid HTTP method: PATCH

原因分析

RestTemplate工厂类(ClientHttpRequestFactory)的默认实现中,不支持使用PATCH方法。

解决办法

在创建RestTemplate对象时,通过构造方法,将RestTemplate配置类的工厂对象修改为HttpComponentsClientHttpRequestFactory即可。

核心代码如下:

RestTemplate restTemplatePatch = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

使用 RestTemplate 发送 PATCH 请求有两种方式(exchange和exchange),完整代码如下:

//jsonValue 字符串类型的为入参
JSONObject paramObject =JSONObject.parseObject(jsonValue);

String url = otnIp;
StringBuffer forwardURL = new StringBuffer();
forwardURL.append("http://").append(url).append("/restconf/Operation/v1/OMCService:Service/SubNetLink");

//创建 restTemplate 对象
RestTemplate restTemplatePatch = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

//方法一:使用exchange
//封装请求头
MultiValueMap<String,String> headers = new LinkedMultiValueMap<String,String>();
headers.add("Accept","application/json");
headers.add("Content-Type","application/json");
//封装请求内容
HttpEntity<JSONObject> requestEntity = new HttpEntity(paramObject,headers);
ResponseEntity responseEntity = restTemplatePatch.exchange(forwardURL.toString(), HttpMethod.PATCH, requestEntity, Object.class, paramMap);
            
//方法二:使用patchForObject
ResponseEntity responseEntity = restTemplatePatch.patchForObject(forwardURL.toString(), paramObject, ResponseEntity.class, paramMap);  

备注:需要添加如下依赖:

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
</dependency>

本文地址:https://blog.csdn.net/qq_34967770/article/details/110880418

相关标签: spring boot