当前位置: 首页 > 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: 封装响应完整数据*/@Beanpublic 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);}
}

使用集合的时候加注解

在这里插入图片描述

请求的效果

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

相关文章:

springBoot--web--函数式web

函数式web 前言场景给容器中放一个Bean&#xff1a;类型是 RouterFunction<ServerResponse>每个业务准备一个自己的handler使用集合的时候加注解请求的效果 前言 springmvc5.2 以后允许我们使用函数式的方式&#xff0c;定义web的请求处理流程 函数式接口 web请求处理的…...

react中hooks闭包

import React, { useState } from react;function Counter() {const [count, setCount] useState(0);return (<div><p>Count: {count}</p><button onClick{() > setCount(count 1)}>Increment</button></div>); }在上面的 React 组件…...

C++笔记之vector的初始化以及assign()方法

C笔记之vector的初始化以及assign()方法 —— 2023年4月15日 上海 code review 文章目录 C笔记之vector的初始化以及assign()方法代码——实践出真知0. 空的vector1. 花括号(initializer_list)——最推荐的初始化方法2. 花括号3. 圆括号花括号4. 圆括号5. 圆括号6. 指针花括号7…...

OSPF基础实验

一、实验拓扑 二、实验要求 1、按照图示配置 IP 地址 2、R1&#xff0c;R2&#xff0c;R3 运行 OSPF 使内网互通&#xff0c;所有接口(公网接口除外)全部宣告进 Area 0; 要求使用环回口作为 Router-id 3、业务网段不允许出现协议报文 4、R5 模拟互联网&#xff0c;内网通过…...

笔记本Charge与Vcore方案

一、笔记本Vcore方案 IMVP8/9:Intel Mobile Voltage Positionin VR12.5:就是指FIVR集成式调压模块(Haswell架构) PMIC:电源管理芯片(Power Management Integrated Circuits) 常见问题分析 1. 不开机,VCORE 短路 : 通常是因为Low side MOS短路造成.量测时可以先将MOS拿…...

error C2632: ‘char‘ followed by ‘char‘ is illegal

error C2632: char followed by char is illegal remove -stdc99...

MySql数据库实现注册登录及个人信息查询的数据库设计

前言: 数据库使用的是mysql 以下创建的表,实现以下功能: 用户1,账号admin,年龄20,关联3件商品 用户2,账号admin2,年龄30,关联2件商品(没有商品和用户1重复) 用户3,账号admin3,年龄50,关联2件商品(这两件商品均是用户1的其中两种) 登录查询对应数据的实现 1.创建用户表Users,并…...

C++-openssl-aes-cbc-pkcs5

PKCS#5填充是PKCS#7填充的一个子集&#xff0c;在PKCS#7填充时BlockSize为8的时候&#xff0c;PKCS#5与PKCS#7填充是一样的&#xff0c;在BlockSize不同时PKCS#5与PKCS#7填充是不同的。 PKCS#5填充是将数据填充到8的倍数&#xff0c; 填充后数据长度的计算公式&#xff1a; 定于…...

一个进程最多可以创建多少个线程基本分析

前言 ​话不多说&#xff0c;先来张脑图~ linux 虚拟内存知识回顾 虚拟内存空间长啥样 在 Linux 操作系统中&#xff0c;虚拟地址空间的内部又被分为内核空间和用户空间两部分&#xff0c;不同位数的系统&#xff0c;地址空间的范围也不同。比如最常见的 32 位和 64 位系统&…...

Swin Transformer V2 Scaling Up Capacity and Resolution(CVPR2022)

文章目录 AbstractIntroduction不稳定性问题下游任务需要的高分辨率问题解决内存问题- Related WorksLanguage networks and scaling upVision networks and scaling upTransferring across window / kernel resolution Swin Transformer V2Swin Transformer简介Scaling Up Mod…...

rust学习——字符串、字符串字面量、切片(slice)、字符串 slice

文章目录 字符串、字符串字面量、切片&#xff08;slice&#xff09;、字符串 slice01、字符串02、字符串字面量03、切片 &#xff08;slice&#xff09;04、字符串 slice 字符串 slice注意要点String 与 &str 的转换字符串深度剖析字符串 slice 作为函数参数例子001例子00…...

SolidWorks模型导入到Gazebo中

首先建立好solidworks模型&#xff0c;然后另存为stl格式&#xff0c; 导出为STL文件时&#xff0c;文件名最好不要是中文&#xff0c;并且要将后缀STL改为stl&#xff0c;否则Gazebo无法识别 这是我创建好的机器人充电桩模型&#xff1a; 尺寸是单位是mm&#xff1a; 135mm …...

使用CMake构建一个简单的C++项目

文章目录 一. 构建一个简单的项目二. 构建过程1. 创建程序源文件2. 编写CMakeList.txt文件3. 构建项目并编译源代码 附件 一. 构建一个简单的项目 最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目&#xff0c;只需要一个包含三个命令的CMakeLists…...

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…...

什么是卷积神经网络?解决了什么问题?

什么是卷积神经网络&#xff1f; 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度神经网络模型&#xff0c;主要用于图像识别、语音识别和自然语言处理等任务。它通过卷积层、池化层和全连接层来实现特征提取和分类。 解决了什么问…...

Golang数组:全面指南与实际示例

揭示Golang数组的威力&#xff1a;从基础到高级技巧 Golang数组是数据存储的基本构建块&#xff0c;为开发人员提供了多种可能性。在这篇正式的博客文章中&#xff0c;我们将探讨Golang数组&#xff0c;从基础知识到高级技巧。通过实际示例和正式的语气&#xff0c;我们将揭示…...

程序连接oracle查询数据的环境配置

连接oracle 数据库真麻烦&#xff0c;还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的&#xff0c;引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…...

【BIGRU预测】基于双向门控循环单元的多变量时间序列预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

RDD算子操作(基本算子和常见算子)

目录 一、基本算子 1.map算子 2.flatMap算子 3.filter算子 4.foreach算子 5.saveAsTextFile算子 6.redueceByKey算子 二、常用Transformation算子 1.mapValues算子 2.groupBy算子 3.distinct算子 4.union算子 5.join算子 6.intersection算子 7.glom算子 8.groupByKey算…...

互联网Java工程师面试题·Java 面试篇·第五弹

目录 79、适配器模式和装饰器模式有什么区别&#xff1f; 80、适配器模式和代理模式之前有什么不同&#xff1f; 81、什么是模板方法模式&#xff1f; 82、什么时候使用访问者模式&#xff1f; 83、什么时候使用组合模式&#xff1f; 84、继承和组合之间有什么不同&#…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...