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

551 阅读1分钟

出现错误如下: Invalid HTTP method: PATCH

错误原因

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

解决方式

pom.xml中引入

<dependency>
    <groupId>org.apache.httpcomponents</goupId>
    <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;
    }
}