从 Spring WebFlux 返回 Flux<String> 返回一个字符串而不是 JSON 中的字符串数组
Posted
技术标签:
【中文标题】从 Spring WebFlux 返回 Flux<String> 返回一个字符串而不是 JSON 中的字符串数组【英文标题】:Returning Flux<String> from Spring WebFlux returns one string instead of array of strings in JSON 【发布时间】:2018-07-03 10:42:33 【问题描述】:Spring WebFlux 的新手,试图在一个端点返回字符串数组,由于某种原因,它返回一个连接字符串而不是 JSON 数组。
用一些类包装它可以解决问题,但想知道如何实际返回字符串数组?例如,返回 Array<String>
按预期工作
class Wrapper(val data: String)
@RestController
class Test()
@RequestMapping("/wrapped") // Returns valid JSON array: ["value":"Hello","value":"World"]
fun b() = Flux.just(Wrapper("Hello"),Wrapper("World"))
@RequestMapping("/raw") // Returns not valid JSON with just one concatenated string: HelloWorld
fun a() = Flux.just("Hello", "World")
【问题讨论】:
【参考方案1】:在 Twitter https://twitter.com/sdeleuze/status/956136517348610048 上得到了 Sébastien Deleuze(Spring 框架提交者)的回答
确实,当元素类型为String时,handler方法应该直接提供格式良好的JSON String块,不涉及与Jackson的序列化。
【讨论】:
那么如果我们想让字符串彼此分离,我们需要做什么呢? 答案很明确:你必须把它包起来。上面的答案有效;虽然你也可以这样做:fun a() = Flux.just("Hello", "World").collectList()
转换为列表会失去反应
确实答案是正确的。这也包含在文档docs.spring.io/spring/docs/current/spring-framework-reference/…
它不会因为你得到一个 Mono 而失去反应以上是关于从 Spring WebFlux 返回 Flux<String> 返回一个字符串而不是 JSON 中的字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
Spring WebFlux,单元测试 Mono 和 Flux
如何在 Spring Webflux 中返回 Mono<Map<String, Flux<Integer>>> 响应?