mirror of
https://gitee.com/yudaocode/SpringBoot-Labs.git
synced 2026-09-09 16:57:32 +08:00
spring webflux 示例
This commit is contained in:
32
lab-27/lab-27-webflux-01/pom.xml
Normal file
32
lab-27/lab-27-webflux-01/pom.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.2.1.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>lab-27-webflux-01</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- 实现对 Spring WebFlux 的自动化配置 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-webflux</artifactId>
|
||||
<version>2.2.1.RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 方便等会写单元测试 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<ServerResponse> userListRouterFunction() {
|
||||
return RouterFunctions.route(RequestPredicates.GET("/users2/list"),
|
||||
new HandlerFunction<ServerResponse>() {
|
||||
|
||||
@Override
|
||||
public Mono<ServerResponse> handle(ServerRequest request) {
|
||||
// 查询列表
|
||||
List<UserVO> 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<ServerResponse> userGetRouterFunction() {
|
||||
return RouterFunctions.route(RequestPredicates.GET("/users2/get"),
|
||||
new HandlerFunction<ServerResponse>() {
|
||||
|
||||
@Override
|
||||
public Mono<ServerResponse> 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<ServerResponse> demoRouterFunction() {
|
||||
return route(GET("/users2/demo"), request -> ok().bodyValue("demo"));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<UserVO> list() {
|
||||
// 查询列表
|
||||
List<UserVO> 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<UserVO> 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<Integer> add(UserAddDTO addDTO) {
|
||||
// 插入用户记录,返回编号
|
||||
Integer returnId = UUID.randomUUID().hashCode();
|
||||
// 返回用户编号
|
||||
return Mono.just(returnId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新指定用户编号的用户
|
||||
*
|
||||
* @param updateDTO 更新用户信息 DTO
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
public Mono<Boolean> update(UserUpdateDTO updateDTO) {
|
||||
// 更新用户记录
|
||||
Boolean success = true;
|
||||
// 返回更新是否成功
|
||||
return Mono.just(success);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定用户编号的用户
|
||||
*
|
||||
* @param id 用户编号
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@PostMapping("/delete") // URL 修改成 /delete ,RequestMethod 改成 DELETE
|
||||
public Mono<Boolean> delete(@RequestParam("id") Integer id) {
|
||||
// 删除用户记录
|
||||
Boolean success = false;
|
||||
// 返回是否更新成功
|
||||
return Mono.just(success);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
19
lab-27/pom.xml
Normal file
19
lab-27/pom.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>labs-parent</artifactId>
|
||||
<groupId>cn.iocoder.springboot.labs</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>lab-27</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<modules>
|
||||
<module>lab-27-webflux-01</module>
|
||||
</modules>
|
||||
|
||||
|
||||
</project>
|
||||
Reference in New Issue
Block a user