Java --- springboot3之web新特性函数式web

一、函数式web

SpringMVC 5.2 以后 允许我们使用函数式的方式,定义Web的请求处理流程

函数式接口

Web请求处理的方式:①、@Controller + @RequestMapping耦合式 路由业务耦合)②、函数式Web:分离式(路由、业务分离)。

参考案例代码:

业务逻辑处理:

@Service
@Slf4j
public class PersonService {
    /**
     * 查询信息
     * @param serverRequest
     * @return
     */
    public ServerResponse getPerson(ServerRequest serverRequest){
        String id = serverRequest.pathVariable("id");
        log.info("查询用户id{}:",id);
        //业务处理
        Person person = new Person(1L, "张三", "[email protected]", 20);
        //构造响应
        return ServerResponse.ok().body(person);
    }

    /**
     * 查询所有用户
     * @param serverRequest
     * @return
     */
    public ServerResponse getPersons(ServerRequest serverRequest){
        //业务处理
        List people = Arrays.asList(
                new Person(1L, "张三", "[email protected]", 20),
                new Person(2L, "李四", "[email protected]", 21),
                new Person(3L, "王五", "[email protected]", 22));
        //构造响应
        return ServerResponse.ok().body(people);
    }

    /**
     * 保存用户
     * @param serverRequest
     * @return
     */
    public ServerResponse addPerson(ServerRequest serverRequest){
        //业务处理
        log.info("保存成功");
        //构造响应
        return ServerResponse.ok().build();
    }

    /**
     * 修改成功
     * @param serverRequest
     * @return
     */
    public ServerResponse updatePerson(ServerRequest serverRequest){
        //业务处理
        log.info("修改成功");
        //构造响应
        return ServerResponse.ok().build();
    }

    /**
     * 删除成功
     * @param serverRequest
     * @return
     */
    public ServerResponse removePerson(ServerRequest serverRequest){
        //业务处理
        log.info("删除成功");
        //构造响应
        return ServerResponse.ok().build();
    }
}

 接口管理:

@Configuration
public class WebFunctionConfig {
    /**
     * 函数式web:给容器中放一个RouterFunction的bean,统一路由管理
     * 核心四大对象
     * RouterFunction:定义路由信息。发什么请求,由谁来处理
     * RequestPredicate:定义请求规则:请求方式、请求参数
     * ServerRequest:封装请求完整数据
     * ServerResponse:封装响应完整数据
     *
     * @return
     */
    @Bean
    public RouterFunction personRoute(PersonService personService){
        RouterFunction routerFunction = RouterFunctions
                .route()//开始定义路由信息
                .GET("/person/{id}", RequestPredicates.accept(MediaType.ALL), personService::getPerson)
                .GET("/persons", personService::getPersons)
                .POST("/addPerson", RequestPredicates.accept(MediaType.APPLICATION_JSON), personService::addPerson)
                .PUT("/updatePerson/{id}", RequestPredicates.accept(MediaType.APPLICATION_JSON), personService::updatePerson)
                .DELETE("/removePerson/{id}", personService::removePerson)
                .build();
        return routerFunction;
    }
}

你可能感兴趣的:(springboot3,java,开发语言)