解决RestTemplate使用PATCH方法报错问题

本文解决Spring框架中使用PATCH方法时出现的I/O错误问题,介绍如何通过配置RestTemplate和OAuth2RestTemplate来支持PATCH请求,包括引入httpclient依赖和自定义HttpComponentsClientHttpRequestFactory。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 错误日志:

org.springframework.web.client.ResourceAccessException: I/O error on PATCH request for "http://localhost:8090/test/1":Invalid HTTP method: PATCH; nested exception is java.net.ProtocolException: Invalid HTTP method: PATCH

错误原因:

RestTemplate工厂类的默认实现中,不支持使用PATCH方法,需要将RestTemplate配置类的工厂对象修改为HttpComponentsClientHttpRequestFactory

解决方式:

pom.xml中引入

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

RestTemplate配置:

@Configuration
public class RestTemplateConfiguration {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(clientHttpRequestFactory());
    }

    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000);
        factory.setReadTimeout(5000);
        return factory;
    }
}

OAuth2RestTemplate配置:

@Configuration
public class OAuth2RestTemplateConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "security.oauth2.client")
    public ClientCredentialsResourceDetails clientCredentialsResourceDetails() {
        return new ClientCredentialsResourceDetails();
    }

    @Bean
    public OAuth2RestTemplate clientCredentialsRestTemplate() {
        OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(clientCredentialsResourceDetails());
        oAuth2RestTemplate.setRequestFactory(clientHttpRequestFactory()); //设置 clientHttpRequestFactory
        return oAuth2RestTemplate;
    }

    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000);
        factory.setReadTimeout(5000);
        return factory;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值