官网:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
Spring WebFlux 是 Spring Framework 5.0中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。
io.projectreactor reactor-test test
org.springframework.boot spring-boot-starter-webflux
org.projectlombok lombok
@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));}
}
@Configuration
public class UserRouter {@Beanpublic RouterFunction routeUser(UserHandler userHandler) {return RouterFunctions.route(RequestPredicates.GET("/bean/webflux").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), userHandler::helloUser);}
}
@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());}
}
@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);}
}
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