1、函数式:

//1、若是form-data形式提交表单内容,即Content-Type: application/x-www-form-urlencoded;可以通过ServerWebExchange 获取

$.ajax({

type: 'POST',

url: "/post/findform",

data: {

name: "aa",

sex:"n"

},

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

// route:

@Configuration

public class PostRouter {

@Bean

public RouterFunction postroute(PostHandler handler) {

return RouterFunctions.route(RequestPredicates.POST("/post/findform")

.and(RequestPredicates.accept(MediaType.APPLICATION_FORM_URLENCODED)),handler::findform);

}

}

// handle:

public Mono findform(ServerRequest request){

// 获取form data,在方法中添加ServerWebExchange对象,使用方法getFormData

ServerWebExchange exchange = request.exchange();

Mono> formData =exchange.getFormData();

return formData.flatMap(map -> {

System.out.println(map.get("name").get(0));

System.out.println(map.get("sex").get(0));

return ServerResponse.ok().contentType(MediaType.APPLICATION_STREAM_JSON)

.body(BodyInserters.fromObject(map));

});

}

// 2、若是application/json的形式提交表单

$.ajax({

type: 'POST',

url: "/post/findjson",

data: JSON.stringify({

"name": "aa"

}),

contentType:"application/json",

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

// route:

@Configuration

public class PostRouter {

@Bean

public RouterFunction postroute(PostHandler handler) {

return RouterFunctions.route(RequestPredicates.POST("/post/findjson")

.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)),handler::find)

}

}

// handle:直接通过map映射获取

public Mono find(ServerRequest serverRequest){

Mono body = serverRequest.bodyToMono(Map.class);

return body.flatMap(map -> {

String name = (String) map.get("name");

System.out.println(name);

return ServerResponse.ok().contentType(MediaType.APPLICATION_STREAM_JSON)

.body(BodyInserters.fromObject(name));

});

}

2、注解式

若是get请求,可通过@RequestParam或直接获取

// get形式提交,下面两种形式都可以直接获取到请求参数

@GetMapping("/save")

private Mono save(final User user){

System.out.println(user.getName());

return Mono.justOrEmpty(userService.save(user));

}

@GetMapping("/save1")

private Mono save(@RequestParam final String name,@RequestParam final String sex){

System.out.println(name);

return Mono.justOrEmpty(userService.save(new User(name,sex)));

}

若是Post请求,当请格式分别为json或表单格式,json使用@RequestBody获取,form格式通过实体映射或使用ServerWebExchange获取

$.ajax({

type: 'POST',

url: "/postController/json",

data: JSON.stringify({

"name": "aa",

"sex":"m"

}),

contentType:"application/json",

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

$.ajax({

type: 'POST',

url: "/postController/jsonS",

data: JSON.stringify({

"name": "aa",

"sex":"m"

}),

contentType:"application/json",

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

$.ajax({

type: 'POST',

url: "/postController/form",

data: {

name: "bb",

sex:"m"

},

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

$.ajax({

type: 'POST',

url: "/postController/formS",

data: {

name: "bb",

sex:"m"

},

dataType: "json",

success: function (data) {

console.log(data);

},error:function () {

console.log("error");

}

});

// controller

@RestController

@RequestMapping("/postController")

public class PostController {

/**

* 通过@RequestBody获取提交的application/json数据

* @param

* @return

*/

@PostMapping(value = "/json",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)

public Mono json(@RequestBody String user) {

System.out.println("json:"+user);

return Mono.just(user);

}

/**

* 通过实体映射获取post的请求体 application/json数据

* @param user

* @return

*/

@PostMapping(value = "/jsonS",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)

public Mono jsonS(@RequestBody User user) {

System.out.println("jsonS:"+ user);

return Mono.just(user.toString());

}

/**

* 通过实体映射获取表单数据

* request:Content-Type: application/x-www-form-urlencoded

* @param user

* @return

*/

@PostMapping(value = "/form", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)

public Mono save(User user) {

System.out.println("form:"+user);

return Mono.justOrEmpty(user);

}

/**

* 通过ServerWebExchange获取表单数据

* request:Content-Type: application/x-www-form-urlencoded

* @param exchange

* @return

*/

@PostMapping(value = "/formS", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)

public Mono save(ServerWebExchange exchange) {

Mono> formData =exchange.getFormData();

return formData.flatMap(map -> {

System.out.println("formS:"+map);

return Mono.justOrEmpty(map.toString());

});

}

}

flux读取不到数据_spring-webflux两种开发模式,获取不到使用ajax的post提交的数据?...相关推荐

  1. flux读取不到数据_【Java】spring-webflux两种开发模式,获取不到使用ajax的post提交的数据?...

    遇到的问题: 1.使用注解式:在js中使用ajax提交post数据name,在controller中使用@RequestBody无法获取到数据. 2.使用函数式:在js中使用ajax提交post数据n ...

  2. javaweb学习总结(二十一)——JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  3. javaweb学习总结(二十一):JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  4. javaweb(二十一)——JavaWeb的两种开发模式

    一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示 图1-1 在jsp+javabean架构中,JSP负 ...

  5. ASP.Net的两种开发模式

    原文出处: Edison Chou的博客(@周旭龙)   欢迎分享原创到伯乐头条 一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebFo ...

  6. c/s和b/s两种开发模式

    CS(Client/Server):客户端----服务器结构. C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快.利于处理大量数据.因为客户端要负责绝大多 ...

  7. jsp的两种开发模式

    Jsp设计模式 n JSP设计模式包括两个: n (1)Model1,JSP+JavaBean设计模式 n (2)Model2,MVC设计模式 模式一JSP+JavaBean模式 n 在这种模式中,J ...

  8. 数据增加的两种方法(二)

    数据增加的两种方法(二) 开发工具与关键技术:SQL Server 2014.数据增加的两种方法(二) 作者:袁何恩 撰写时间:2019年7月26日 今天,我要和大家分享的技术是新增数据的两种方法. ...

  9. 进一步封装axios并调用其读取数据(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)

    注意!!!(修改于2020年7月18日) 在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {&quo ...

最新文章

  1. matlab 数据集制作,机器学习数据集制作与划分MATLAB实现
  2. 专访@爱可可-爱生活:如何做好科学研究(干货满满)
  3. python语言培训班-深圳Python语言培训班
  4. ncbi查找目的基因序列_基于PrimerBank和NCBI数据库的引物查找与设计
  5. 王道计算机考研 数据结构 (查找-上)
  6. 光速OFFER,为AI奔赴,商汤2022届校招提前批正式启动!
  7. 关于ORACLE 10g中“ORA-12541:TNS:no listener”的问题解决方案
  8. densenet论文_DRCN论文解读
  9. 软件测试从业 3 年+了,怎么兼顾 管理 与 自身成长?
  10. 配置vivado用vscode编辑文本
  11. 【Labplus 3】Scratch获取角色造型的数量
  12. [通用]汉字按照拼音字母排序
  13. RoboWare Studio入门教程(一)
  14. 计算机ps特效教程,制作木质电脑桌的PS滤镜教程
  15. 事实表和维度表的定义
  16. 用HFFS实例讲解PCB蛇形天线设计技巧
  17. 基于动物性去思考人性
  18. 系统调用ptrace和进程跟踪
  19. contos7 配置 python3环境 支持微信公众号开发
  20. 特步软件测试员工资,特步集团全面预算管理系统——管理员手册V1.1

热门文章

  1. Linux内核同步机制之(四):spin lock【转】
  2. KDE vs GNOME: 设置,应用和小工具
  3. 你值得拥有:25个Linux性能监控工具
  4. [Java 基础]方法
  5. 浅谈我对JCS 的理解
  6. 五、(H3C)基于802.1x+AD+DHCP+NPS动态下发vlan 华三交换机配置
  7. python 报错 SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1076) 解决方法
  8. docker mysql 容器无故停止的原因
  9. linux centos 修改主机名
  10. linux Makefile 中使用 shell命令