SpringBoot-函数式Web

SpringBoot-函数式Web

流程
  • 给容器中放一个Bean:类型为RouterFunction<ServerResponse>,集中所有路由信息
  • 每个业务准备一个自己的Handler
四大核心对象
  • RouterFunction:定义路由信息。发什么请求,谁来处理
  • RequestPredicates:定义请求:请求谓语。请求方式、请求参数
  • ServerRequest:封装请求完整数据
  • ServerResponse:封装响应完整数据
示例代码
配置类
java 复制代码
@Configuration
public class WebFunctionConfig {
    @Bean
    public RouterFunction<ServerResponse> router(UserBizHandler userBizHandler) {
        return RouterFunctions.route()
                .GET("/user/{id}", RequestPredicates.accept(MediaType.ALL), userBizHandler::getUser)
                .GET("/users", RequestPredicates.accept(MediaType.ALL), userBizHandler::getUsers)
                .POST("/user", RequestPredicates.accept(MediaType.APPLICATION_JSON), userBizHandler::createUser)
                .DELETE("/user/{id}", RequestPredicates.accept(MediaType.ALL), userBizHandler::deleteUser)
                .build();
    }
}
业务类
java 复制代码
package com.vmware.service;

import com.vmware.domain.User;
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.ArrayList;
import java.util.List;

@Slf4j
@Service
public class UserBizHandler {
    public ServerResponse getUser(ServerRequest request) {
        User user = new User("张三", "12345678");
        return ServerResponse.ok().body(user);
    }

    public ServerResponse getUsers(ServerRequest request) {
        List<User> users = new ArrayList<>();
        users.add(new User("张三","1234"));
        users.add(new User("李四","abc"));
        users.add(new User("王五","hello"));
        //body中的对象就是@ResponseBody的原理,利用HttpMessageConverter写出为json
        return ServerResponse.ok().body(users);
    }

    public ServerResponse createUser(ServerRequest request) throws ServletException, IOException {
        User user = request.body(User.class);
        log.info("创建用户:{}",user);
        return ServerResponse.ok().build();
    }

    public ServerResponse deleteUser(ServerRequest request){
        String id = request.pathVariable("id");
        log.info("删除用户:{}",id);
        return ServerResponse.ok().build();
    }
}
相关推荐
爱敲键盘的猴子4 分钟前
Java Spring -- 声明式事务控制
java·spring·事务控制
爱编程的小新☆10 分钟前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
weixin_3831964717 分钟前
java基础面试题@Autowired和@Resource区别
java·开发语言
evans在进步20 分钟前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
Web Security Loop1 小时前
MAC卸载JDK环境
java·macos·jdk
Rain的Java大神之路2 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
counting money2 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
xiaohaiAIgeo3 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
小强库计算机毕业设计3 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质3 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式