Spring WebFlux学习笔记

  1. 添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
  2. 编写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();
           }
        }
    }
    
  3. 编写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) ;
        }
    }
    
  4. 可以用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")) ;
        }
    }
    
  5. Webflux官网地址:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值