- 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
- 编写Handler业务处理
@Slf4j @Component public class UserHandler { // 替代以springmvc中@RequestParam接收的参数 public Mono<ServerResponse> add(ServerRequest request) { Mono<MultiValueMap<String, String>> formData = request.exchange().getFormData() ; return formData.flatMap(multiValueMap -> { String username = multiValueMap.getFirst("username"); String addr = multiValueMap.getFirst("addr") ; log.info("=====> username : {}, addr: {}", username, addr); return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body( Mono.just(JsonResult.success("success")),JsonResult.class ); }) ; } // 替待springmvc中@RequestBody接收的参数 public Mono<ServerResponse> add2(ServerRequest request) { Mono<User> userMono = request.bodyToMono(User.class); log.info("add2 method execute ..."); Mono<JsonResult<String>> resultMono = userMono.map(user -> { String retContent = doBusi(user); return JsonResult.success(retContent); }); return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(resultMono,JsonResult.class); } // 业务处理方法一般调用service private String doBusi(User user){ log.info("username : {}, addr : {}", user.getUsername(), user.getAddr()); log.info("do busi ....."); sleep(1000); return "Hello world" ; } private void sleep(int time){ try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } }
- 编写route配置
@Configuration public class MyRouteConfig { @Autowired private UserHandler userHandler ; @Bean public RouterFunction<ServerResponse> routerFunction(){ return RouterFunctions .route(POST("/api/users/add"), userHandler::add) .andRoute(RequestPredicates.POST("/api/users/add2") .and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), userHandler::add2) ; } }
- 可以用Controller形式编写webflux处理(与上面步骤3,4中的配置/api/users/add2效果一样)
@Slf4j @RestController @RequestMapping("/api/users") public class UserController { @PostMapping("/add3") public Mono<JsonResult<String>> add2(@RequestBody User user){ log.info("user : {}", user); return Mono.just(JsonResult.success("success")) ; } }
- Webflux官网地址:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
Spring WebFlux学习笔记
猜你喜欢
转载自blog.csdn.net/yichengjie_c/article/details/113334753
今日推荐
周排行