You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Reactive WebFlux中如何从ServerRequest提取字符串数组

问题根因

原代码调用bodyToMono(String.class)时,Spring WebFlux会把整个请求的JSON数组直接反序列化为单个字符串对象,因此得到的是带转义符的整串JSON,而非拆分后的字符串集合。

修复实现

Spring WebFlux原生支持请求体直接反序列化为集合/数组类型,有两种常用实现方式:

方式1:直接反序列化为字符串数组(写法更简洁)

如果可以接受先拿到数组再转List,直接指定反序列化类型为String[].class即可:

import java.util.Arrays;
import java.util.List;
import reactor.core.publisher.Mono;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;

public Mono<ServerResponse> getArray(ServerRequest serverRequest) {
    return serverRequest
            // 直接将JSON数组反序列化为字符串数组
            .bodyToMono(String[].class)
            // 转换为List<String>,此处可插入你的业务逻辑处理
            .map(Arrays::asList)
            .flatMap(stringList -> 
                ServerResponse.ok()
                        .contentType(MediaType.APPLICATION_JSON)
                        // 这里直接返回List前端会收到标准JSON数组,无额外转义
                        .bodyValue(stringList)
            );
}

方式2:直接反序列化为List(适配泛型场景)

如果需要直接拿到List类型,用ParameterizedTypeReference处理泛型擦除问题即可:

import java.util.List;
import reactor.core.publisher.Mono;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;

public Mono<ServerResponse> getArray(ServerRequest serverRequest) {
    return serverRequest
            // 借助ParameterizedTypeReference保留泛型信息,直接反序列化为List<String>
            .bodyToMono(new ParameterizedTypeReference<List<String>>() {})
            // 此处拿到的stringList就是你需要的类型,直接传入业务逻辑即可
            .flatMap(stringList -> 
                ServerResponse.ok()
                        .contentType(MediaType.APPLICATION_JSON)
                        .bodyValue(stringList)
            );
}
验证说明

两种方式处理后,你拿到的集合对象已经是拆分好的List<String>,返回给前端时也会输出标准JSON数组["123","456"],不会出现额外转义符。


内容的提问来源于stack exchange,提问作者Shiva kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:24:10