spring webflux 接收表单参数(亲测可用 application/x-www-form-urlencoded )

533 阅读1分钟

spring webflux 接收表单参数(亲测可用)

前端请求信息

请求头

POST /apigateway/api/page HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 103
Connection: keep-alive
Sec-GPC: 1
Pragma: no-cache
Cache-Control: no-cache

请求参数(已解析)

form表单参数

page=1&limit=10&apiName=测试GET接口&apiServerRoute=&apiPath=&appCatalogId=0

后端代码(亲测可用)

controller代码

    /**
     * 根据条件分页查询
     *
     * @param apiDto 参数对象(包含分页参数)
     * @return
     */
    @PostMapping("/pageByCondition")
    @ApiOperation(value = "分页查询指定分类下接口", notes = "", httpMethod = "Post")
    public ResultData<List<ApiPO>> pageByCondition(@Validated @ModelAttribute ApiDTO apiDto) {
        Page<ApiPO> pos = apiService.pageByCondition(apiDto);
        return ResultData.success(pos.getContent(), pos.getTotalElements());
    }

失败案例

通过订阅 exchange.getFormData() 获取(失败)

//  exchange.getFormData() 获取(失败)
@PostMapping("/pageByCondition")    
public ResultData<List<ApiPO>> pageByCondition(ServerWebExchange exchange) {
    MultiValueMap<String, String> formDataResponse = new LinkedMultiValueMap<>();   
    exchange.getFormData().subscribe(formDataResponse::addAll);  
}    
​

通过订阅 exchange.getMultipartData() 获取(失败)

//  exchange.getMultipartData() 获取(失败)
@PostMapping("/pageByCondition")    
public ResultData<List<ApiPO>> pageByCondition(ServerWebExchange exchange) {
    MultiValueMap<String, Part> formMultipart = new LinkedMultiValueMap<>();
    exchange.getMultipartData().subscribe(formMultipart::addAll);
} 

参考案例

引用参考

[1]  blog.csdn.net/qq_37044686… webflux 支持formdata获取参数(包括文件),以及formdata参数封装

[​2]  segmentfault.com/q/101000001… spring-webflux两种开发模式,获取不到使用ajax的post提交的数据?

[3]  www.cnblogs.com/moyu0-0/art… Spring WebFlux 官方文档(博主翻译重制)

[4]  juejin.cn/post/703846… Spring Cloud Gateway 读取请求传参

[5]  stackoverflow.com/questions/6… stackoverflow.com/questions/6…

[6]  blog.csdn.net/weixin_4393… springboot webflux 参数传递(表单序列化)

实现参考

[1]  www.cnblogs.com/limuma/p/93… Spring Boot WebFlux-10——WebFlux 实战图书管理系统