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();
    }
}
相关推荐
小马爱打代码13 小时前
Java泛型:T、E、K、V、?
java
l***370913 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
小坏讲微服务13 小时前
Spring Boot 4.0 与 Spring Cloud Alibaba 2025 整合完整指南
java·spring boot·分布式·后端·spring cloud·微服务·架构
毕设源码-邱学长13 小时前
【开题答辩全过程】以 基于Spring Boot的酒店管理系统为例,包含答辩的问题和答案
java·spring boot·后端
晨晖213 小时前
MyBatisPlus的条件构造器
java·数据库·windows
有味道的男人13 小时前
速卖通商品详情接口(速卖通API系列)
java·大数据·数据库
一只小透明啊啊啊啊13 小时前
垃圾回收算法有哪些
java·jvm
DanB2413 小时前
Java(网络编程)
java·网络·php
5***846413 小时前
Spring全家桶简介
java·后端·spring