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