Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
9f857c1f
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 搜索 >>
提交
9f857c1f
编写于
11月 13, 2018
作者:
R
Rossen Stoyanchev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Replace constant exceptions with inlined ones
Issue: SRP-17475
上级
75b13967
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
31 addition
and
12 deletion
+31
-12
spring-webflux/src/main/java/org/springframework/web/reactive/DispatcherHandler.java
...a/org/springframework/web/reactive/DispatcherHandler.java
+9
-2
spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java
...ngframework/web/reactive/resource/ResourceWebHandler.java
+1
-3
spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerErrorTests.java
...ngframework/web/reactive/DispatcherHandlerErrorTests.java
+11
-6
spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java
...mework/web/reactive/resource/ResourceWebHandlerTests.java
+10
-1
未找到文件。
spring-webflux/src/main/java/org/springframework/web/reactive/DispatcherHandler.java
浏览文件 @
9f857c1f
...
...
@@ -142,16 +142,23 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
@Override
public
Mono
<
Void
>
handle
(
ServerWebExchange
exchange
)
{
if
(
this
.
handlerMappings
==
null
)
{
return
Mono
.
error
(
HANDLER_NOT_FOUND_EXCEPTION
);
return
createNotFoundError
(
);
}
return
Flux
.
fromIterable
(
this
.
handlerMappings
)
.
concatMap
(
mapping
->
mapping
.
getHandler
(
exchange
))
.
next
()
.
switchIfEmpty
(
Mono
.
error
(
HANDLER_NOT_FOUND_EXCEPTION
))
.
switchIfEmpty
(
createNotFoundError
(
))
.
flatMap
(
handler
->
invokeHandler
(
exchange
,
handler
))
.
flatMap
(
result
->
handleResult
(
exchange
,
result
));
}
private
<
R
>
Mono
<
R
>
createNotFoundError
()
{
return
Mono
.
defer
(()
->
{
Exception
ex
=
new
ResponseStatusException
(
HttpStatus
.
NOT_FOUND
,
"No matching handler"
);
return
Mono
.
error
(
ex
);
});
}
private
Mono
<
HandlerResult
>
invokeHandler
(
ServerWebExchange
exchange
,
Object
handler
)
{
if
(
this
.
handlerAdapters
!=
null
)
{
for
(
HandlerAdapter
handlerAdapter
:
this
.
handlerAdapters
)
{
...
...
spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java
浏览文件 @
9f857c1f
...
...
@@ -88,8 +88,6 @@ public class ResourceWebHandler implements WebHandler, InitializingBean {
private
static
final
Set
<
HttpMethod
>
SUPPORTED_METHODS
=
EnumSet
.
of
(
HttpMethod
.
GET
,
HttpMethod
.
HEAD
);
private
static
final
Exception
NOT_FOUND_EXCEPTION
=
new
ResponseStatusException
(
HttpStatus
.
NOT_FOUND
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
ResourceWebHandler
.
class
);
...
...
@@ -324,7 +322,7 @@ public class ResourceWebHandler implements WebHandler, InitializingBean {
return
getResource
(
exchange
)
.
switchIfEmpty
(
Mono
.
defer
(()
->
{
logger
.
debug
(
exchange
.
getLogPrefix
()
+
"Resource not found"
);
return
Mono
.
error
(
NOT_FOUND_EXCEPTION
);
return
Mono
.
error
(
new
ResponseStatusException
(
HttpStatus
.
NOT_FOUND
)
);
}))
.
flatMap
(
resource
->
{
try
{
...
...
spring-webflux/src/test/java/org/springframework/web/reactive/DispatcherHandlerErrorTests.java
浏览文件 @
9f857c1f
...
...
@@ -19,6 +19,7 @@ package org.springframework.web.reactive;
import
java.time.Duration
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.concurrent.atomic.AtomicReference
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -81,15 +82,19 @@ public class DispatcherHandlerErrorTests {
@Test
public
void
noHandler
()
{
MockServerWebExchange
exchange
=
MockServerWebExchange
.
from
(
MockServerHttpRequest
.
get
(
"/does-not-exist"
));
Mono
<
Void
>
publisher
=
this
.
dispatcherHandler
.
handle
(
exchange
);
Mono
<
Void
>
mono
=
this
.
dispatcherHandler
.
handle
(
exchange
);
StepVerifier
.
create
(
publisher
)
.
consumeErrorWith
(
error
->
{
assertThat
(
error
,
instanceOf
(
ResponseStatusException
.
class
));
assertThat
(
error
.
getMessage
(),
is
(
"404 NOT_FOUND \"No matching handler\""
));
StepVerifier
.
create
(
mono
)
.
consumeErrorWith
(
ex
->
{
assertThat
(
ex
,
instanceOf
(
ResponseStatusException
.
class
));
assertThat
(
ex
.
getMessage
(),
is
(
"404 NOT_FOUND \"No matching handler\""
));
})
.
verify
();
// SPR-17475
AtomicReference
<
Throwable
>
exceptionRef
=
new
AtomicReference
<>();
StepVerifier
.
create
(
mono
).
consumeErrorWith
(
exceptionRef:
:
set
).
verify
();
StepVerifier
.
create
(
mono
).
consumeErrorWith
(
ex
->
assertNotSame
(
exceptionRef
.
get
(),
ex
)).
verify
();
}
@Test
...
...
spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java
浏览文件 @
9f857c1f
...
...
@@ -24,6 +24,7 @@ import java.util.Arrays;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.atomic.AtomicReference
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -274,6 +275,7 @@ public class ResourceWebHandlerTests {
private
void
testInvalidPath
(
String
requestPath
,
ResourceWebHandler
handler
)
{
ServerWebExchange
exchange
=
MockServerWebExchange
.
from
(
MockServerHttpRequest
.
get
(
""
));
setPathWithinHandlerMapping
(
exchange
,
requestPath
);
StepVerifier
.
create
(
handler
.
handle
(
exchange
))
.
expectErrorSatisfies
(
err
->
{
assertThat
(
err
,
instanceOf
(
ResponseStatusException
.
class
));
...
...
@@ -468,11 +470,18 @@ public class ResourceWebHandlerTests {
MockServerHttpRequest
request
=
MockServerHttpRequest
.
method
(
httpMethod
,
""
).
build
();
MockServerWebExchange
exchange
=
MockServerWebExchange
.
from
(
request
);
setPathWithinHandlerMapping
(
exchange
,
"not-there.css"
);
StepVerifier
.
create
(
this
.
handler
.
handle
(
exchange
))
Mono
<
Void
>
mono
=
this
.
handler
.
handle
(
exchange
);
StepVerifier
.
create
(
mono
)
.
expectErrorSatisfies
(
err
->
{
assertThat
(
err
,
instanceOf
(
ResponseStatusException
.
class
));
assertEquals
(
HttpStatus
.
NOT_FOUND
,
((
ResponseStatusException
)
err
).
getStatus
());
}).
verify
(
TIMEOUT
);
// SPR-17475
AtomicReference
<
Throwable
>
exceptionRef
=
new
AtomicReference
<>();
StepVerifier
.
create
(
mono
).
consumeErrorWith
(
exceptionRef:
:
set
).
verify
();
StepVerifier
.
create
(
mono
).
consumeErrorWith
(
ex
->
assertNotSame
(
exceptionRef
.
get
(),
ex
)).
verify
();
}
@Test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录