小编And*_*dyB的帖子

在 Spring Boot 2 中将包含带引号的字符串的请求正文解析为 JSON

我有一个应用程序公开一个接受PUTJSON 格式字符串请求的端点,例如:

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,因为我们已经有实际客户在使用它。

java spring json spring-boot

11
推荐指数
1
解决办法
6924
查看次数

当包含返回 Mono 的函数时,我应该如何使用 Mono.zipWith?

我有一个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而不是单个参数,这更丑陋。

有什么想法吗?

java project-reactor spring-webflux

5
推荐指数
1
解决办法
5579
查看次数

WebClient 上的 Exchange() 会抛出哪些异常?

我已经实现了一个服务,它使 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 的服务发现 - 对于其中一些异常,我想触发重新发现,对于其中一些,我不想。

reactor-netty spring-webclient

2
推荐指数
1
解决办法
3009
查看次数