Site Overlay

在WebFlux下从ServerWebExchange中获取参数

问题:使用正常的注解无法从前端发过来的请求中正确的获取到参数,又找不到问题所在,需要获取所有的请求体,再自己取参

获取参数方式和web包类似,直接在controller方法参数的位置填上serverHttpRequst,框架即可自动将请求注入,但是这里serverHttpRequst获取的请求仅限于普通请求的body中的内容,以及methed方法这些。但是,前端如果是通过form-data方式传参过来, serverHttpRequst 得到的是body是null。因此必须拿到更上一级的请求内容ServerWebExchange。通过ServerWebExchange获取form-data的参数再加以验证。

    @RequestMapping(value = "/uploadhead")    
    public Object uploadhead(ServerWebExchange exchange) throws IOException {
        Map<String, String> stringStringMap = exchange.getRequest().getHeaders().toSingleValueMap();
        log.info("map:{}", stringStringMap);
        //打印head
        Mono<MultiValueMap<String, String>> formData = exchange.getFormData();
        //获取form-data中的内容
        formData.subscribe(map -> {
            Map<String, String> formMap = map.toSingleValueMap();
            log.info("formData:{}", formMap);
        });
        //如果是获取post或者get请求之类的body的话就从exchange.getRequest().getBody()中获取
        Map<String, String> queryParams = exchange.getRequest().getQueryParams().toSingleValueMap();
        log.info("queryParams:{}", queryParams);
        URI uri = exchange.getRequest().getURI();
        log.info("uri:{}", uri);
        return exchange.getMultipartData().map(data -> {
                    Map<String, Part> multipartData = data.toSingleValueMap();
                    log.info("multipartData:{}", multipartData);
                    try {
                        return chessService.uploadhead(multipartData);
                        //此处拿到的就是form-data中获取的所有参数的map,需要打印或者使用就看自己的业务需求怎么处理了。
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }
        );

1 thought on “在WebFlux下从ServerWebExchange中获取参数

发表评论

电子邮件地址不会被公开。 必填项已用*标注

A beliving heart is your magic My heart
Copyright © 2020 Diuut. All Rights Reserved. | Catch Vogue by Catch Themes