Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
129d7bef
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
129d7bef
编写于
9月 20, 2016
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polishing
上级
d94ce0a1
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
33 addition
and
43 deletion
+33
-43
spring-web-reactive/src/main/java/org/springframework/web/reactive/support/AbstractServletHttpHandlerAdapterInitializer.java
...support/AbstractServletHttpHandlerAdapterInitializer.java
+4
-7
spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpConnector.java
...work/http/client/reactive/ReactorClientHttpConnector.java
+6
-4
spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java
...framework/http/codec/AbstractServerHttpMessageWriter.java
+2
-2
spring-web/src/main/java/org/springframework/http/server/reactive/ReactorHttpHandlerAdapter.java
...ework/http/server/reactive/ReactorHttpHandlerAdapter.java
+3
-4
spring-web/src/main/java/org/springframework/web/client/reactive/WebClient.java
...va/org/springframework/web/client/reactive/WebClient.java
+18
-26
未找到文件。
spring-web-reactive/src/main/java/org/springframework/web/reactive/support/AbstractServletHttpHandlerAdapterInitializer.java
浏览文件 @
129d7bef
...
...
@@ -38,8 +38,7 @@ import org.springframework.web.WebApplicationInitializer;
* @author Arjen Poutsma
* @since 5.0
*/
public
abstract
class
AbstractServletHttpHandlerAdapterInitializer
implements
WebApplicationInitializer
{
public
abstract
class
AbstractServletHttpHandlerAdapterInitializer
implements
WebApplicationInitializer
{
/**
* The default servlet name. Can be customized by overriding {@link #getServletName}.
...
...
@@ -69,18 +68,16 @@ public abstract class AbstractServletHttpHandlerAdapterInitializer
HttpHandler
httpHandler
=
createHttpHandler
();
Assert
.
notNull
(
httpHandler
,
"createHttpHandler() did not return a HttpHandler for servlet ["
+
servletName
+
"]"
);
"createHttpHandler() did not return a HttpHandler for servlet ["
+
servletName
+
"]"
);
ServletHttpHandlerAdapter
servlet
=
createServlet
(
httpHandler
);
Assert
.
notNull
(
servlet
,
"createHttpHandler() did not return a ServletHttpHandlerAdapter for servlet ["
+
servletName
+
"]"
);
"createHttpHandler() did not return a ServletHttpHandlerAdapter for servlet ["
+
servletName
+
"]"
);
ServletRegistration
.
Dynamic
registration
=
servletContext
.
addServlet
(
servletName
,
servlet
);
Assert
.
notNull
(
registration
,
"Failed to register servlet with name '"
+
servletName
+
"'."
+
"Check if there is another servlet registered under the same name."
);
"Check if there is another servlet registered under the same name."
);
registration
.
setLoadOnStartup
(
1
);
registration
.
addMapping
(
getServletMappings
());
...
...
spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpConnector.java
浏览文件 @
129d7bef
...
...
@@ -19,24 +19,25 @@ package org.springframework.http.client.reactive;
import
java.net.URI
;
import
java.util.function.Function
;
import
org.springframework.http.HttpMethod
;
import
reactor.core.publisher.Mono
;
import
reactor.ipc.netty.config.ClientOptions
;
import
reactor.ipc.netty.http.HttpException
;
import
reactor.ipc.netty.http.HttpInbound
;
import
org.springframework.http.HttpMethod
;
/**
* Reactor-Netty implementation of {@link ClientHttpConnector}
*
* @author Brian Clozel
* @see reactor.ipc.netty.http.HttpClient
* @since 5.0
* @see reactor.ipc.netty.http.HttpClient
*/
public
class
ReactorClientHttpConnector
implements
ClientHttpConnector
{
private
final
ClientOptions
clientOptions
;
/**
* Create a Reactor Netty {@link ClientHttpConnector} with default {@link ClientOptions}
* and SSL support enabled.
...
...
@@ -52,6 +53,7 @@ public class ReactorClientHttpConnector implements ClientHttpConnector {
this
.
clientOptions
=
clientOptions
;
}
@Override
public
Mono
<
ClientHttpResponse
>
connect
(
HttpMethod
method
,
URI
uri
,
Function
<?
super
ClientHttpRequest
,
Mono
<
Void
>>
requestCallback
)
{
...
...
@@ -66,4 +68,4 @@ public class ReactorClientHttpConnector implements ClientHttpConnector {
.
map
(
httpInbound
->
new
ReactorClientHttpResponse
(
httpInbound
));
}
}
\ No newline at end of file
}
spring-web/src/main/java/org/springframework/http/codec/AbstractServerHttpMessageWriter.java
浏览文件 @
129d7bef
...
...
@@ -47,6 +47,7 @@ public abstract class AbstractServerHttpMessageWriter<T> implements ServerHttpMe
this
.
writer
=
writer
;
}
@Override
public
boolean
canWrite
(
ResolvableType
elementType
,
MediaType
mediaType
)
{
return
this
.
writer
.
canWrite
(
elementType
,
mediaType
);
...
...
@@ -78,14 +79,13 @@ public abstract class AbstractServerHttpMessageWriter<T> implements ServerHttpMe
/**
* Invoked before writing the response to resolve hints by
* {@link #write(Publisher, ResolvableType, ResolvableType, MediaType, ServerHttpRequest, ServerHttpResponse, Map)}.
*
* @param streamType the original type used for the method return value. For annotation
* based controllers, the {@link MethodParameter} is available via {@link ResolvableType#getSource()}.
* @param elementType the stream element type to process
* @param mediaType the content type to use when writing. May be {@code null} to
* indicate that the default content type of the converter must be used.
* @param request the current HTTP request
* @return
A
dditional information about how to write the body
* @return
a
dditional information about how to write the body
*/
protected
abstract
Map
<
String
,
Object
>
resolveWriteHints
(
ResolvableType
streamType
,
ResolvableType
elementType
,
MediaType
mediaType
,
ServerHttpRequest
request
);
...
...
spring-web/src/main/java/org/springframework/http/server/reactive/ReactorHttpHandlerAdapter.java
浏览文件 @
129d7bef
...
...
@@ -18,16 +18,15 @@ package org.springframework.http.server.reactive;
import
java.util.function.Function
;
import
io.netty.handler.codec.http.HttpResponseStatus
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
reactor.core.publisher.Mono
;
import
reactor.ipc.netty.http.HttpChannel
;
import
org.apache.commons.logging.LogFactory
;
import
org.springframework.core.io.buffer.NettyDataBufferFactory
;
import
org.springframework.util.Assert
;
import
io.netty.handler.codec.http.HttpResponseStatus
;
/**
* Adapt {@link HttpHandler} to the Reactor Netty channel handling function.
*
...
...
@@ -43,7 +42,7 @@ public class ReactorHttpHandlerAdapter implements Function<HttpChannel, Mono<Voi
public
ReactorHttpHandlerAdapter
(
HttpHandler
httpHandler
)
{
Assert
.
notNull
(
httpHandler
,
"
'httpHandler' is required.
"
);
Assert
.
notNull
(
httpHandler
,
"
HttpHandler is required
"
);
this
.
httpHandler
=
httpHandler
;
}
...
...
spring-web/src/main/java/org/springframework/web/client/reactive/WebClient.java
浏览文件 @
129d7bef
...
...
@@ -86,15 +86,13 @@ import org.springframework.util.ClassUtils;
*/
public
final
class
WebClient
{
private
static
final
ClassLoader
classLoader
=
WebClient
.
class
.
getClassLoader
();
private
static
final
boolean
jackson2Present
=
ClassUtils
.
isPresent
(
"com.fasterxml.jackson.databind.ObjectMapper"
,
WebClient
.
class
.
getClassLoader
())
&&
ClassUtils
.
isPresent
(
"com.fasterxml.jackson.core.JsonGenerator"
,
WebClient
.
class
.
getClassLoader
());
private
static
final
boolean
jackson2Present
=
ClassUtils
.
isPresent
(
"com.fasterxml.jackson.databind.ObjectMapper"
,
classLoader
)
&&
ClassUtils
.
isPresent
(
"com.fasterxml.jackson.core.JsonGenerator"
,
classLoader
);
private
static
final
boolean
jaxb2Present
=
ClassUtils
.
isPresent
(
"javax.xml.bind.Binder"
,
WebClient
.
class
.
getClassLoader
());
private
static
final
boolean
jaxb2Present
=
ClassUtils
.
isPresent
(
"javax.xml.bind.Binder"
,
classLoader
);
private
ClientHttpConnector
clientHttpConnector
;
...
...
@@ -107,7 +105,6 @@ public final class WebClient {
* Create a {@code WebClient} instance, using the {@link ClientHttpConnector}
* implementation given as an argument to drive the underlying
* implementation.
*
* Register by default the following Encoders and Decoders:
* <ul>
* <li>{@link ByteBufferEncoder} / {@link ByteBufferDecoder}</li>
...
...
@@ -115,7 +112,6 @@ public final class WebClient {
* <li>{@link Jaxb2XmlEncoder} / {@link Jaxb2XmlDecoder}</li>
* <li>{@link Jackson2JsonEncoder} / {@link Jackson2JsonDecoder}</li>
* </ul>
*
* @param clientHttpConnector the {@code ClientHttpRequestFactory} to use
*/
public
WebClient
(
ClientHttpConnector
clientHttpConnector
)
{
...
...
@@ -124,8 +120,9 @@ public final class WebClient {
this
.
webClientConfig
.
setResponseErrorHandler
(
new
DefaultResponseErrorHandler
());
}
/**
* Add
s
default HTTP message readers.
* Add default HTTP message readers.
*/
protected
final
void
addDefaultHttpMessageReaders
(
List
<
HttpMessageReader
<?>>
messageReaders
)
{
messageReaders
.
add
(
new
DecoderHttpMessageReader
<>(
new
ByteBufferDecoder
()));
...
...
@@ -140,7 +137,7 @@ public final class WebClient {
}
/**
* Add
s
default HTTP message writers.
* Add default HTTP message writers.
*/
protected
final
void
addDefaultHttpMessageWriters
(
List
<
HttpMessageWriter
<?>>
messageWriters
)
{
messageWriters
.
add
(
new
EncoderHttpMessageWriter
<>(
new
ByteBufferEncoder
()));
...
...
@@ -187,11 +184,10 @@ public final class WebClient {
Collections
.
unmodifiableList
(
interceptors
)
:
Collections
.
emptyList
());
}
/**
* Perform the actual HTTP request/response exchange
*
* <p>
* Requesting from the exposed {@code Flux} will result in:
* <p>Requesting from the exposed {@code Flux} will result in:
* <ul>
* <li>building the actual HTTP request using the provided {@code ClientWebRequestBuilder}</li>
* <li>encoding the HTTP request body with the configured {@code HttpMessageWriter}s</li>
...
...
@@ -199,7 +195,6 @@ public final class WebClient {
* </ul>
*/
public
WebResponseActions
perform
(
ClientWebRequestBuilder
builder
)
{
ClientWebRequest
clientWebRequest
=
builder
.
build
();
DefaultClientHttpRequestInterceptionChain
interception
=
new
DefaultClientHttpRequestInterceptionChain
(
this
.
clientHttpConnector
,
...
...
@@ -214,7 +209,6 @@ public final class WebClient {
public
void
doWithStatus
(
Consumer
<
HttpStatus
>
consumer
)
{
clientResponse
.
doOnNext
(
clientHttpResponse
->
consumer
.
accept
(
clientHttpResponse
.
getStatusCode
()));
}
@Override
public
<
T
>
T
extract
(
ResponseExtractor
<
T
>
extractor
)
{
return
extractor
.
extract
(
clientResponse
,
webClientConfig
);
...
...
@@ -222,6 +216,7 @@ public final class WebClient {
};
}
protected
class
DefaultWebClientConfig
implements
WebClientConfig
{
private
List
<
HttpMessageReader
<?>>
messageReaders
;
...
...
@@ -230,7 +225,6 @@ public final class WebClient {
private
ResponseErrorHandler
responseErrorHandler
;
public
DefaultWebClientConfig
()
{
this
.
messageReaders
=
new
ArrayList
<>();
addDefaultHttpMessageReaders
(
this
.
messageReaders
);
...
...
@@ -266,13 +260,13 @@ public final class WebClient {
}
}
protected
class
DefaultRequestCallback
implements
Function
<
ClientHttpRequest
,
Mono
<
Void
>>
{
private
final
ClientWebRequest
clientWebRequest
;
private
final
List
<
Consumer
<?
super
HttpMessage
>>
requestCustomizers
;
public
DefaultRequestCallback
(
ClientWebRequest
clientWebRequest
,
List
<
Consumer
<?
super
HttpMessage
>>
requestCustomizers
)
{
this
.
clientWebRequest
=
clientWebRequest
;
...
...
@@ -303,9 +297,8 @@ public final class WebClient {
}
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
protected
Mono
<
Void
>
writeRequestBody
(
Publisher
<?>
content
,
ResolvableType
requestType
,
ClientHttpRequest
request
,
List
<
HttpMessageWriter
<?>>
messageWriters
)
{
protected
Mono
<
Void
>
writeRequestBody
(
Publisher
<?>
content
,
ResolvableType
requestType
,
ClientHttpRequest
request
,
List
<
HttpMessageWriter
<?>>
messageWriters
)
{
MediaType
contentType
=
request
.
getHeaders
().
getContentType
();
Optional
<
HttpMessageWriter
<?>>
messageWriter
=
resolveWriter
(
messageWriters
,
requestType
,
contentType
);
...
...
@@ -324,6 +317,7 @@ public final class WebClient {
}
}
protected
class
DefaultClientHttpRequestInterceptionChain
implements
ClientHttpRequestInterceptionChain
{
private
final
ClientHttpConnector
connector
;
...
...
@@ -337,10 +331,9 @@ public final class WebClient {
private
int
index
;
public
DefaultClientHttpRequestInterceptionChain
(
ClientHttpConnector
connector
,
List
<
ClientHttpRequestInterceptor
>
interceptors
,
ClientWebRequest
clientWebRequest
)
{
List
<
ClientHttpRequestInterceptor
>
interceptors
,
ClientWebRequest
clientWebRequest
)
{
Assert
.
notNull
(
connector
,
"
'connector'
should not be null"
);
Assert
.
notNull
(
connector
,
"
ClientHttpConnector
should not be null"
);
this
.
connector
=
connector
;
this
.
interceptors
=
interceptors
;
this
.
clientWebRequest
=
clientWebRequest
;
...
...
@@ -364,7 +357,6 @@ public final class WebClient {
new
DefaultRequestCallback
(
this
.
clientWebRequest
,
this
.
requestCustomizers
));
}
}
}
}
\ No newline at end of file
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录