当前位置: 首页 > news >正文

springBoot--web--函数式web

函数式web

  • 前言
  • 场景
  • 给容器中放一个Bean:类型是 RouterFunction<ServerResponse>
  • 每个业务准备一个自己的handler
  • 使用集合的时候加注解
  • 请求的效果

前言

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<ServerResponse>
    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();
    }
}

每个业务准备一个自己的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);
    }
}

使用集合的时候加注解

在这里插入图片描述

请求的效果

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

相关文章:

  • 可管理链接仪表板Bender
  • 打破运维疆界:异构复杂网络环境的集中监控和管理
  • django基于Python的房价预测系统+爬虫+大屏可视化分析
  • LuatOS-SOC接口文档(air780E)--lcd - lcd驱动模块
  • 分布式内存计算Spark环境部署与分布式内存计算Flink环境部署
  • 最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍
  • Filter与Listener(过滤器与监听器)
  • 第6周 .NET
  • Jupyter Notebook 设置黑色背景主题
  • Flutter Image组件如何处理图片加载过程中的错误?
  • Python-Python高阶技巧:闭包、装饰器、设计模式、多线程、网络编程、正则表达式、递归
  • 搭建网站七牛云CDN加速配置
  • Stable diffusion的一些参数意义及常规设置
  • 逻辑漏洞详解
  • UE5--物体卡片与材质入门
  • 《数据结构与算法之美》读书笔记1
  • numpy矩阵画框框
  • 贪吃蛇项目实践
  • HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法
  • app爬虫中的Airtest元素存在或等待
  • 印度宣布即日起对所有巴基斯坦航班关闭领空
  • 全国人大常委会关于授权国务院在中国(新疆)自由贸易试验区暂时调整适用《中华人民共和国种子法》有关规定的决定
  • 来论|受美国“保护”,日本民众要付出什么代价?
  • 韩国检方结束对尹锡悦私宅的扣押搜查
  • 烟花秀、新航线、购物节......上海邮轮文化旅游节今日开幕
  • 中青旅:第一季度营业收入约20.54亿元,乌镇景区接待游客数量同比减少6.7%