• springBoot--web--函数式web


    前言

    springmvc5.2 以后允许我们使用函数式的方式,定义web的请求处理流程
    函数式接口
    web请求处理的方式:
    1、@controller + @RequestMapping: 耦合性(路由、业务耦合)
    2、函数式web:分离式(路由、业务分离)
    官方文档
    在这里插入图片描述

    场景

    场景:user Restful-crud
    GET/user/1 获取1号用户
    GET/users 获取所有用户
    POST/user 请求体携带json
    put/user/1 请求体携带json,修改1号用户
    delete/user/1 删除1号用户

    给容器中放一个Bean:类型是 RouterFunction

    在这里插入图片描述

    package com.atguigu.boot304demo.config;
    
    import com.atguigu.boot304demo.biz.UserBizHandler;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.MediaType;
    import org.springframework.web.servlet.function.RequestPredicates;
    import org.springframework.web.servlet.function.RouterFunction;
    import org.springframework.web.servlet.function.RouterFunctions;
    import org.springframework.web.servlet.function.ServerResponse;
    
    /**
     * @author jitwxs
     * @date 2023年10月22日 21:33
     */
    @Configuration
    public class WebFunctionConfig {
        /*函数式web:
        1、给容器中放一个Bean:类型是 RouterFunction
        2、每个业务准备一个自己的handler
    
    
        核心四大对象:
        1、RouterFunction:定义路由信息,发什么请求,谁来处理
        2、RequestPredicate: 定义请求:请求谓语,请求方式(GET\POSt)、请求参数
        3、ServerTequest: 封装请求完整数据
        4、ServerResponse: 封装响应完整数据
        */
        @Bean
        public RouterFunction<ServerResponse> userRouter(UserBizHandler userBizHandler){
            return RouterFunctions.route()
                    .GET("/user/{id}", RequestPredicates.accept(MediaType.ALL),userBizHandler::getUser)
                    .GET("/users", userBizHandler::getUsers)
                    .POST("/user",RequestPredicates.accept(MediaType.APPLICATION_JSON), userBizHandler::postUser)
                    .PUT("/user/{id}",RequestPredicates.accept(MediaType.APPLICATION_JSON),userBizHandler::putUser)
                    .DELETE("/user/{id}",userBizHandler::deleteUser)
                    .build();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    每个业务准备一个自己的handler

    在这里插入图片描述

    package com.atguigu.boot304demo.biz;
    
    import com.atguigu.boot304demo.bean.Person;
    import jakarta.servlet.ServletException;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Service;
    import org.springframework.web.servlet.function.ServerRequest;
    import org.springframework.web.servlet.function.ServerResponse;
    
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * @author jitwxs
     * @date 2023年10月22日 21:51
     */
    @Slf4j
    @Service
    public class UserBizHandler {
        /*
        查询指定id的用户
        @param request
        @return
        */
        public ServerResponse getUser(ServerRequest request){
    //        业务处理
            String id = request.pathVariable("id");
            log.info("正在查询id为{}的数据",id);
            Person person = new Person(2l,"张三","aaa.com",18);
            return ServerResponse
                    .ok()
                    .body(person);
        }
    
        public ServerResponse getUsers(ServerRequest request){
    //        业务处理
            List<Person> list = Arrays.asList(
                    new Person(1l,"张三","aaa.com",18),
                    new Person(2l,"张三","aaa.com",18)
            );
            return ServerResponse
                    .ok()
                    .body(list);
        }
    
        public ServerResponse postUser(ServerRequest request) throws ServletException, IOException {
            Person body = request.body(Person.class);
            log.info("保存的信息是{}",body);
            String ace = "post请求成功";
    //        业务处理
            return ServerResponse
                    .ok()
                    .body(ace);
        }
    
        public ServerResponse putUser(ServerRequest request){
            String ace = "put请求成功";
    //        业务处理
            return ServerResponse
                    .ok()
                    .body(ace);
        }
    
        public ServerResponse deleteUser(ServerRequest request){
            String ace = "删除成功";
    //        业务处理
            return ServerResponse
                    .ok()
                    .body(ace);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    使用集合的时候加注解

    在这里插入图片描述

    请求的效果

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    C++:拷贝构造函数的初始化列表
    猿创征文丨赶紧进来!!!带你0距离全面接触 变量和常量
    LINUX 文件基本管理
    Java.lang.Class类 toString()方法有什么功能呢?
    EN 15102:2019 壁纸/墙布/软木饰面板CE认证
    基于微信小程序的健身私教预约系统
    一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系
    好的架构是进化来的,不是设计来的
    2-1、IOC思想以及实现
    产品经理常用的工具有哪些?
  • 原文地址:https://blog.csdn.net/m0_50207524/article/details/133977974