Spring WebFlux简单使用
创始人
2024-03-15 12:37:18
0

官网:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html

1.WebFlux介绍

Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。

  • Mono:实现发布者,即要么成功发布并返回 0 或 1 个元素,要么错误。
  • Flux:实现发布者,即要么成功发布 0 到 N 个元素,要么错误。

2.bean方式路由

2.0.引入pom

io.projectreactorreactor-testtest
org.springframework.bootspring-boot-starter-webflux

org.projectlomboklombok

2.1.编写处理器类 Handler

@Slf4j
@Component
public class UserHandler {private User user;@PostConstructpublic void init() {User user = new User().setPhone("12345678901").setUserId(1L).setUserName("WebFlux");this.user = user;}public Mono helloUser(ServerRequest request) {return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(user));}
}

2.2.编写路由器类 Router

@Configuration
public class UserRouter {@Beanpublic RouterFunction routeUser(UserHandler userHandler) {return RouterFunctions.route(RequestPredicates.GET("/bean/webflux").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), userHandler::helloUser);}
}

2.3.访问测试

image-20220115235703169

3.使用自动配置加注解驱动的模式

3.1.编写处理器类 Handler

@Slf4j
@Component
public class UserHandler {private User user;@PostConstructpublic void init() {User user = new User().setPhone("12345678901").setUserId(1L).setUserName("WebFlux");this.user = user;}public Flux listUser() {List userList = new ArrayList<>();userList.add(user);return Flux.fromIterable(userList);}public Mono getById(Long id) {log.debug("查询用户:{}", id);return Mono.justOrEmpty(user);}public Mono saveUser(User user) {log.debug("新增用户:{}", user);return Mono.create(userMonoSink -> userMonoSink.success());}public Mono updateUser(User user) {log.debug("修改用户:{}", user);return Mono.create(userMonoSink -> userMonoSink.success());}public Mono removeUser(Long userId) {log.debug("删除用户:{}", userId);return Mono.create(userMonoSink -> userMonoSink.success());}
}

3.2.编写controller

@AllArgsConstructor
@RestController
@RequestMapping("/webflux")
public class WebFluxController {private final UserHandler userHandler;@GetMapping("/list")public Flux listUser() {return userHandler.listUser();}@GetMapping("/{id}")public Mono getById(@PathVariable("id") Long id) {return userHandler.getById(id);}@PostMappingpublic Mono saveUser(@RequestBody User user) {return userHandler.saveUser(user);}@PutMappingpublic Mono updateUser(@RequestBody User user) {return userHandler.updateUser(user);}@DeleteMapping("/{id}")public Mono deleteUser(@PathVariable("id") Long id) {return userHandler.removeUser(id);}
}

3.3.postman测试

image-20220116104807148

image-20220116104830580

image-20220116104857859

image-20220116104922257

image-20220116104952870

2022-01-16 10:48:19.987 DEBUG 3540 --- [ctor-http-nio-3] top.dongxibao.demo.handler.UserHandler   : 查询用户:1
2022-01-16 10:48:43.028 DEBUG 3540 --- [ctor-http-nio-3] top.dongxibao.demo.handler.UserHandler   : 新增用户:User(userId=null, userName=null, phone=null)
2022-01-16 10:49:04.686 DEBUG 3540 --- [ctor-http-nio-3] top.dongxibao.demo.handler.UserHandler   : 修改用户:User(userId=null, userName=null, phone=null)
2022-01-16 10:49:36.560 DEBUG 3540 --- [ctor-http-nio-3] top.dongxibao.demo.handler.UserHandler   : 删除用户:1

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...