我有一个应用程序公开一个接受PUT
JSON 格式字符串请求的端点,例如:
PUT /my/endpoint
"some string"
Run Code Online (Sandbox Code Playgroud)
我的端点方法签名类似于:
PUT /my/endpoint
"some string"
Run Code Online (Sandbox Code Playgroud)
myString
使用 Spring Boot 1 (1.5.22.RELEASE),上面示例的值PUT
将是文字 text some string
,但在 Spring Boot 2 (2.3.6.RELEASE) 下,它现在是文字文本"some string"
- 即看起来输入严格来说不会被解析为 JSON,因为引号不会被删除。
我相信带引号的字符串是有效的 JSON(不带引号的字符串则不是),就像对象(在{
和中}
)和列表(在[
和 中]
)一样。
我已经删除了一些无关紧要的细节,我认为这些细节对于当前的问题并不重要(例如,我们用作CompletableFuture
返回值,我也有一个@PathVariable
在那里,并且正在进行一些注释驱动的验证) ,但我留下了我们正在使用自定义媒体类型的说法,以防与它有关。
我有什么想法可以说服 Spring Boot 2 将我的请求正文正确地视为 JSON?不幸的是,我无法重新定义 API,因为我们已经有实际客户在使用它。
我有一个Mono
我想与另一个结合Mono
,如:
val firstMono = Mono.just("thing");
val secondMono = Mono.just("other thing");
val thirdMono = firstMono.zipWith(secondMono, function);
Run Code Online (Sandbox Code Playgroud)
但我希望 thefunction
也返回 a Mono
,而不会以 a 结束Mono<Mono<?>>
我能想到的最好的是:
val thirdMono = firstMono.zipWith(secondMono, function)
.flatMap(identity());
Run Code Online (Sandbox Code Playgroud)
但这似乎有点像黑客。
我也想到了
val thirdMono = firstMono.zipWith(secondMono)
.flatMap(function);
Run Code Online (Sandbox Code Playgroud)
但在那种情况下,我必须function
接受一个Tuple2
而不是单个参数,这更丑陋。
有什么想法吗?
我已经实现了一个服务,它使 ReST 调用其他服务来实现其部分功能。我正在使用反应式WebClient
,例如:
webClient.post()
.uri(....)
.contentType(....)
.accept(....)
.header(....)
.syncBody(someRequestObject)
.exchange()
.flatMap(someResponseHandler::handleResponse)
.doOnError(throwable -> {
// do interesting things depending on throwable
})
.retry(1, this::somePredicateDependingOnThrowable);
Run Code Online (Sandbox Code Playgroud)
现在...我处理 HTTP 状态someResponseHandler::handleResponse
,但我真正想知道的是,还有哪些其他类型的异常/错误exchange()
- 即
显然,这些都不是 HTTP 状态代码 - 但我找不到任何文档来告诉我可以查找什么。我只是没有找对地方吗?我浏览了反应式 WebClient 的文档,也浏览了 Reactor Netty 参考指南,但没有成功。
对于背景来说,这很重要,因为我们进行基于 HATEOAS 的服务发现 - 对于其中一些异常,我想触发重新发现,对于其中一些,我不想。