问题:使用正常的注解无法从前端发过来的请求中正确的获取到参数,又找不到问题所在,需要获取所有的请求体,再自己取参
获取参数方式和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中获取参数”