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();
    }
}
相关推荐
Olrookie40 分钟前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
倚栏听风雨1 小时前
java.lang.SecurityException异常
java
星河队长1 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
鼠鼠我捏,要死了捏2 小时前
Java虚拟线程原理与性能优化实战
java·performance-optimization·virtual-thread
艾菜籽2 小时前
Spring MVC练习:留言板
java·spring·mvc
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 自定义静态资源目录 笔记31
spring boot·笔记·后端·spring
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 遍历 笔记40
spring boot·笔记·thymeleaf
左灯右行的爱情3 小时前
4-Spring SPI机制解读
java·后端·spring
Code小翊3 小时前
C语言bsearch的使用
java·c语言·前端
yong99903 小时前
C#驱动斑马打印机实现包装自动打印
java·数据库·c#