public class RestTemplateConfig { @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory ( ) { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory ( ) ; return factory ;

SimpleClientHttpRequestFactory 继承自 ClientHttpRequestFactory,同时继承ClientHttpRequestFactory的有
在这里插入图片描述
主要有4个,分别是

  1. SimpleClientHttpRequestFactory
  2. OkHttp3ClientHttpRequestFactory
  3. HttpComponentsClientHttpRequestFactory
  4. Netty4ClientHttpRequestFactory
    我们先看默认的SimpleClientHttpRequestFactory
    1、SimpleClientHttpRequestFactory
	@Override
	public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
		HttpURLConnection connection = openConnection(uri.toURL(), this.proxy);
		prepareConnection(connection, httpMethod.name());
		if (this.bufferRequestBody) {
			return new SimpleBufferingClientHttpRequest(connection, this.outputStreaming);
		else {
			return new SimpleStreamingClientHttpRequest(connection, this.chunkSize, this.outputStreaming);

这里用到的是 HttpURLConnection,点进去看
在这里插入图片描述
可以看到支持的请求类型,根本就没有patch,说明这个HttpURLConnection是不支持patch请求,代码里边也有如下判断,就是非常简单粗暴循环这个支持的请求类型数组,不在这个数组中的请求一律抛出异常
在这里插入图片描述

也就是说默认的restTemplate是不支持patch请求的。
找到问题所在了,那应该怎么去解决问题呢。更换对应的工厂类,并添加对应的jar包就可以了
解决方案一:

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory();
        return factory;
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </dependency>

解决方案二:

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        return factory;
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
                    先上代码这是代码报错的配置    @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        return factory;    }SimpleClientHttpRequestFactory 继承自 ClientHt
				
org.apache.http.ConnectionClosedException.class org.apache.http.ConnectionReuseStrategy.class org.apache.http.Consts.class org.apache.http.ContentTooLongException.class org.apache.http.ExceptionLogger.class org.apache.http.FormattedHeader.class org.apache.http.Header.class org.apache.http.HeaderElement.class org.apache.http.HeaderElementIterator.class org.apache.http.HeaderIterator.class org.apache.http.HttpClientConnection.class org.apache.http.HttpConnection.class org.apache.http.HttpConnectionFactory.class org.apache.http.HttpConnectionMetrics.class org.apache.http.HttpEntity.class org.apache.http.HttpEntityEnclosingRequest.class org.apache.http.HttpException.class org.apache.http.HttpHeaders.class org.apache.http.HttpHost.class org.apache.http.HttpInetConnection.class org.apache.http.HttpMessage.class org.apache.http.HttpRequest.class org.apache.http.HttpRequestFactory.class org.apache.http.HttpRequestInterceptor.class org.apache.http.HttpResponse.class org.apache.http.HttpResponseFactory.class org.apache.http.HttpResponseInterceptor.class org.apache.http.HttpServerConnection.class org.apache.http.HttpStatus.class org.apache.http.HttpVersion.class org.apache.http.MalformedChunkCodingException.class org.apache.http.MessageConstraintException.class org.apache.http.MethodNotSupportedException.class org.apache.http.NameValuePair.class org.apache.http.NoHttpResponseException.class org.apache.http.ParseException.class org.apache.http.ProtocolException.class org.apache.http.ProtocolVersion.class org.apache.http.ReasonPhraseCatalog.class org.apache.http.RequestLine.class org.apache.http.StatusLine.class org.apache.http.TokenIterator.class org.apache.http.TruncatedChunkException.class org.apache.http.UnsupportedHttpVersionException.class org.apache.http.annotation.Contract.class org.apache.http.annotation.Experimental.class org.apache.http.annotation.Obsolete.class org.apache.http.annotation.ThreadingBehavior.class org.apache.http.annotation.package-info.class org.apache.http.concurrent.BasicFuture.class org.apache.http.concurrent.Cancellable.class org.apache.http.concurrent.FutureCallback.class org.apache.http.concurrent.package-info.class org.apache.http.config.ConnectionConfig.class org.apache.http.config.Lookup.class org.apache.http.config.MessageConstraints.class org.apache.http.config.Registry.class org.apache.http.config.RegistryBuilder.class org.apache.http.config.SocketConfig.class org.apache.http.config.package-info.class org.apache.http.entity.AbstractHttpEntity.class org.apache.http.entity.BasicHttpEntity.class org.apache.http.entity.BufferedHttpEntity.class org.apache.http.entity.ByteArrayEntity.class org.apache.http.entity.ContentLengthStrategy.class org.apache.http.entity.ContentProducer.class org.apache.http.entity.ContentType.class org.apache.http.entity.EntityTemplate.class org.apache.http.entity.FileEntity.class org.apache.http.entity.HttpEntityWrapper.class org.apache.http.entity.InputStreamEntity.class org.apache.http.entity.SerializableEntity.class org.apache.http.entity.StringEntity.class org.apache.http.entity.package-info.class org.apache.http.impl.AbstractHttpClientConnection.class org.apache.http.impl.AbstractHttpServerConnection.class org.apache.http.impl.BHttpConnectionBase.class org.apache.http.impl.ConnSupport.class org.apache.http.impl.DefaultBHttpClientConnection.class org.apache.http.impl.DefaultBHttpClientConnectionFactory.class org.apache.http.impl.DefaultBHttpServerConnection.class org.apache.http.impl.DefaultBHttpServerConnectionFactory.class org.apache.http.impl.DefaultConnectionReuseStrategy.class org.apache.http.impl.DefaultHttpClientConnection.class org.apache.http.impl.DefaultHttpRequestFactory.class org.apache.http.impl.DefaultHttpResponseFactory.class org.apache.http.impl.DefaultHttpServerConnection.class org.apache.http.impl.EnglishReasonPhraseCatalog.class org.apache.http.impl.HttpConnectionMetricsImpl.class org.apache.http.impl.NoConnectionReuseStrategy.class org.apache.http.impl.SocketHttpClientConnection.class org.apache.http.impl.SocketHttpServerConnection.class org.apache.http.impl.bootstrap.HttpServer.class org.apache.http.impl.bootstrap.RequestListener.class org.apache.http.impl.bootstrap.SSLServerSetupHandler.class org.apache.http.impl.bootstrap.ServerBootstrap.class org.apache.http.impl.bootstrap.ThreadFactoryImpl.class
近期项目中需要通过Spring-Cloud调用其他project的REST接口,不管是delete、put、post或get,都可以调试成功,但是到patch方式发送请求就无法访问: 如果开启了熔断器,需要去掉调用,因为,熔断器会把你的真正的异常给覆盖掉,不管你什么异常,熔断器一般会给你提示请求超时之类的异常。 超时异常如: com.netflix.hystrix.exception.Hyst
JAVA 面向对象程序设计教程 第13章 Java网络编程 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第1页。 第13章 Java网络编程 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第2页。 13.1 TCP/IP协议简介 13.2 网络开发中的常用工具类 13.3 面向连接的TCP通信 13.4 无连接的UDP通信 13.5 UDP广播通信 13.6 局域网通信工具 第13章 Java网络编程 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第3页。 13.1 TCP/IP协议简介 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第4页。 13.1 TCP/IP协议简介 底层网络 网络层 传输层 应用层 底层网络协议 网页浏览 文件传输 电子邮件 视频会议 IP TCP UDP 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第5页。 TCP 则提供面向连接的服务。 1.端到端的传输协议TCP 主机 A 主机 B 建立连接 数据传输 释放连接 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第6页。 UDP 在传送数据之前不需要先建立连接。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。 1. 端到端的传输协议UDP 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第7页。 端口号是一个标记机器的逻辑通信信道的正整数。 IP地址和端口号组成了所谓的Socket套接字。Socket是网络上运行的程序之间双向通信链路的真正终端。 Socket的概念 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第8页。 端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留。 Socket的概念 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第9页。 为了方便开发,Java中提供了很多进行网络开发的辅助类,通过这些类的恰到使用可以在网络开发中达到事半功倍的效果。针对网络通信的不同层次,Java提供的网络开发的辅助类有四大类:InetAddress 、URLs、Sockets、Datagram。 InetAddress面向的是IP层,用于标识网络上的硬件资源。 URL面向的应用层,通过URL,Java程序可以直接送出或读入网络上的数据。 Sockets和Datagram面向的则是传输层。Sockets使用的是TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。 Datagram则使用UDP协议,是另一种网络传输方式,它把数据的目的地纪录在数据包中,然后直接放在网络上。 13.2 网络开发中的常用工具类 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第10页。 Java提供的网络开发辅助类都包含在java.net包中,其主要的类和可能产生的异常包括: 面向IP层的类:InetAddress 面向应用层的类:URL、URLConnection TCP协议相关类:Socket、ServerSocket UDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket 可能产生的异常:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException 本节将介绍两个常用的工具类,URL与InetAddress。 13.2 网络开发中的常用工具类 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第11页。 URL是统一资源定位符(Uniform Resource Locator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图象文件、声音文件
1 异常描述在通过 IP 地址及端口号调用远程方法,进行单元测试的时候,报出如下异常:2 异常原因通过观察上图标记出来的异常描述,咱们可以知道: java.net.MalformedURLException: no protocol 此异常,为:no protocol,没有指定通信协议异常。3 解决方法既然咱们已经知道了是因为没有指定通信协议,从而导致异常的发生。那么,咱们再回过头来,看看上面的
使用AsyncRestTemplateexchange()方式,methodpatch时报错: java.net.ProtocolException: Invalid HTTP method: PATCH 经过一番调试,还是无法解决该问题,最后使用RestTemplate ,只是无法异步了。 HttpURLConnection conn = (HttpURLConnectio...
使用 RestTemplate 调用请求方式为PATCH的接口时,报如下错误: java.net.ProtocolException: Invalid HTTP method: PATCH RestTemplate工厂类(ClientHttpRequestFactory)的默认实现中,不支持使用PATCH方法。 在创建RestTemplate对象时,通过构造方法,将RestTemplate配置类的工厂对象修改为HttpComponentsClientHttpRequestFa