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

问题描述

使用 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>
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值