From 0cf03f659bf8dcbe0ed85c512f4bd3fd0ff95d83 Mon Sep 17 00:00:00 2001
From: YunaiV <>
Date: Sun, 24 Nov 2019 17:52:37 +0800
Subject: [PATCH] =?UTF-8?q?spring=20webflux=20=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lab-27/lab-27-webflux-01/pom.xml | 32 +++++++
.../lab27/springwebflux/Application.java | 13 +++
.../config/WebFluxRouteConfiguration.java | 64 +++++++++++++
.../controller/UserController.java | 93 +++++++++++++++++++
.../lab27/springwebflux/dto/UserAddDTO.java | 35 +++++++
.../springwebflux/dto/UserUpdateDTO.java | 45 +++++++++
.../lab27/springwebflux/vo/UserVO.java | 35 +++++++
lab-27/pom.xml | 19 ++++
pom.xml | 1 +
9 files changed, 337 insertions(+)
create mode 100644 lab-27/lab-27-webflux-01/pom.xml
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/Application.java
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/config/WebFluxRouteConfiguration.java
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/controller/UserController.java
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserAddDTO.java
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserUpdateDTO.java
create mode 100644 lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/vo/UserVO.java
create mode 100644 lab-27/pom.xml
diff --git a/lab-27/lab-27-webflux-01/pom.xml b/lab-27/lab-27-webflux-01/pom.xml
new file mode 100644
index 00000000..30fb8851
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/pom.xml
@@ -0,0 +1,32 @@
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.1.RELEASE
+
+
+ 4.0.0
+
+ lab-27-webflux-01
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+ 2.2.1.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/Application.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/Application.java
new file mode 100644
index 00000000..4f207dfc
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/Application.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springboot.lab27.springwebflux;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/config/WebFluxRouteConfiguration.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/config/WebFluxRouteConfiguration.java
new file mode 100644
index 00000000..e614ee79
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/config/WebFluxRouteConfiguration.java
@@ -0,0 +1,64 @@
+package cn.iocoder.springboot.lab27.springwebflux.config;
+
+import cn.iocoder.springboot.lab27.springwebflux.vo.UserVO;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+import org.springframework.web.reactive.function.server.*;
+import reactor.core.publisher.Mono;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
+import static org.springframework.web.reactive.function.server.RouterFunctions.route;
+import static org.springframework.web.reactive.function.server.ServerResponse.ok;
+
+@Configuration
+public class WebFluxRouteConfiguration {
+
+ @Bean
+ public RouterFunction userListRouterFunction() {
+ return RouterFunctions.route(RequestPredicates.GET("/users2/list"),
+ new HandlerFunction() {
+
+ @Override
+ public Mono handle(ServerRequest request) {
+ // 查询列表
+ List result = new ArrayList<>();
+ result.add(new UserVO().setId(1).setUsername("yudaoyuanma"));
+ result.add(new UserVO().setId(2).setUsername("woshiyutou"));
+ result.add(new UserVO().setId(3).setUsername("chifanshuijiao"));
+ // 返回列表
+ return ServerResponse.ok().bodyValue(result);
+ }
+
+ });
+ }
+
+ @Bean
+ public RouterFunction userGetRouterFunction() {
+ return RouterFunctions.route(RequestPredicates.GET("/users2/get"),
+ new HandlerFunction() {
+
+ @Override
+ public Mono handle(ServerRequest request) {
+ // 获得编号
+ Integer id = request.queryParam("id")
+ .map(s -> StringUtils.isEmpty(s) ? null : Integer.valueOf(s)).get();
+ // 查询用户
+ UserVO user = new UserVO().setId(id).setUsername(UUID.randomUUID().toString());
+ // 返回列表
+ return ServerResponse.ok().bodyValue(user);
+ }
+
+ });
+ }
+
+ @Bean
+ public RouterFunction demoRouterFunction() {
+ return route(GET("/users2/demo"), request -> ok().bodyValue("demo"));
+ }
+
+}
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/controller/UserController.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/controller/UserController.java
new file mode 100644
index 00000000..b3f17750
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/controller/UserController.java
@@ -0,0 +1,93 @@
+package cn.iocoder.springboot.lab27.springwebflux.controller;
+
+import cn.iocoder.springboot.lab27.springwebflux.dto.UserAddDTO;
+import cn.iocoder.springboot.lab27.springwebflux.dto.UserUpdateDTO;
+import cn.iocoder.springboot.lab27.springwebflux.vo.UserVO;
+import org.springframework.web.bind.annotation.*;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 用户 Controller
+ */
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+ /**
+ * 查询用户列表
+ *
+ * @return 用户列表
+ */
+ @GetMapping("/list")
+ public Flux list() {
+ // 查询列表
+ List result = new ArrayList<>();
+ result.add(new UserVO().setId(1).setUsername("yudaoyuanma"));
+ result.add(new UserVO().setId(2).setUsername("woshiyutou"));
+ result.add(new UserVO().setId(3).setUsername("chifanshuijiao"));
+ // 返回列表
+ return Flux.fromIterable(result);
+ }
+
+ /**
+ * 获得指定用户编号的用户
+ *
+ * @param id 用户编号
+ * @return 用户
+ */
+ @GetMapping("/get")
+ public Mono get(@RequestParam("id") Integer id) {
+ // 查询用户
+ UserVO user = new UserVO().setId(id).setUsername(UUID.randomUUID().toString());
+ // 返回
+ return Mono.just(user);
+ }
+
+ /**
+ * 添加用户
+ *
+ * @param addDTO 添加用户信息 DTO
+ * @return 添加成功的用户编号
+ */
+ @PostMapping("add")
+ public Mono add(UserAddDTO addDTO) {
+ // 插入用户记录,返回编号
+ Integer returnId = UUID.randomUUID().hashCode();
+ // 返回用户编号
+ return Mono.just(returnId);
+ }
+
+ /**
+ * 更新指定用户编号的用户
+ *
+ * @param updateDTO 更新用户信息 DTO
+ * @return 是否修改成功
+ */
+ @PostMapping("/update")
+ public Mono update(UserUpdateDTO updateDTO) {
+ // 更新用户记录
+ Boolean success = true;
+ // 返回更新是否成功
+ return Mono.just(success);
+ }
+
+ /**
+ * 删除指定用户编号的用户
+ *
+ * @param id 用户编号
+ * @return 是否删除成功
+ */
+ @PostMapping("/delete") // URL 修改成 /delete ,RequestMethod 改成 DELETE
+ public Mono delete(@RequestParam("id") Integer id) {
+ // 删除用户记录
+ Boolean success = false;
+ // 返回是否更新成功
+ return Mono.just(success);
+ }
+
+}
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserAddDTO.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserAddDTO.java
new file mode 100644
index 00000000..32674a82
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserAddDTO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.springboot.lab27.springwebflux.dto;
+
+/**
+ * 用户添加 DTO
+ */
+public class UserAddDTO {
+
+ /**
+ * 账号
+ */
+ private String username;
+ /**
+ * 密码
+ */
+ private String password;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserAddDTO setUsername(String username) {
+ this.username = username;
+ return this;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public UserAddDTO setPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+}
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserUpdateDTO.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserUpdateDTO.java
new file mode 100644
index 00000000..b02edb31
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/dto/UserUpdateDTO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.springboot.lab27.springwebflux.dto;
+
+public class UserUpdateDTO {
+
+ /**
+ * 编号
+ */
+ private Integer id;
+ /**
+ * 账号
+ */
+ private String username;
+ /**
+ * 密码
+ */
+ private String password;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public UserUpdateDTO setId(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserUpdateDTO setUsername(String username) {
+ this.username = username;
+ return this;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public UserUpdateDTO setPassword(String password) {
+ this.password = password;
+ return this;
+ }
+
+}
diff --git a/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/vo/UserVO.java b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/vo/UserVO.java
new file mode 100644
index 00000000..7dd64075
--- /dev/null
+++ b/lab-27/lab-27-webflux-01/src/main/java/cn/iocoder/springboot/lab27/springwebflux/vo/UserVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.springboot.lab27.springwebflux.vo;
+
+/**
+ * 用户 VO
+ */
+public class UserVO {
+
+ /**
+ * 编号
+ */
+ private Integer id;
+ /**
+ * 账号
+ */
+ private String username;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public UserVO setId(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public UserVO setUsername(String username) {
+ this.username = username;
+ return this;
+ }
+
+}
diff --git a/lab-27/pom.xml b/lab-27/pom.xml
new file mode 100644
index 00000000..198be1ed
--- /dev/null
+++ b/lab-27/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ labs-parent
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-27
+ pom
+
+ lab-27-webflux-01
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 17804293..be43cb66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,7 @@
lab-24
lab-25
lab-26
+ lab-27