SpringMVC 解析(四)编程式路由

本文详细介绍了Spring MVC的编程式路由,包括处理函数的定义(HandlerFunction、ServerRequest和ServerResponse)、路由函数的创建(RouterFunctions和Predicates)、路由规则及嵌套路由的配置。此外,还讨论了参数校验、路由配置以及路由过滤器的使用方法。
摘要由CSDN通过智能技术生成

多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上。Spring还提供了一种编程的方式去实现请求和路由方法之间的路由关系,这种关系在Spring启动时确定,运行过程中不可变。编程式路由和注解式路由可以使用同一个DispatcherServlet。本文会对Spring编程式Endpoint进行介绍,本文主要参考了Spring官方文档

总览

在Spring MVC编程式路由中一次请求会被一个处理方法进行处理,处理方法在Spring中用HandlerFunction表示,函数的入参为ServerRequest,返回值为ServerResponse。Spring可以通过编程的方式定义路由规则RouterFunction,RouterFunction等价于@RequestMapping注解。我们可以按照如下方式去配置路由规则,并且可以通过@Configuration中的@Bean来将路由规则RouterFunction注册到Servlet中。

import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.web.servlet.function.RequestPredicates.*;
import static org.springframework.web.servlet.function.RouterFunctions.route;

PersonRepository repository = ...
PersonHandler handler = new PersonHandler(repository);

RouterFunction<ServerResponse> route = route()
    .GET("/person/{id}", accept(APPLICATION_JSON), handler::getPerson)
    .GET("/person", accept(APPLICATION_JSON), handler::listPeople)
    .POST("/person", handler::createPerson)
    .build();


public class PersonHandler {

    // ...

    public ServerResponse listPeople(ServerRequest request) {
        // ...
    }

    public ServerResponse createPerson(ServerRequest request) {
        // ...
    }

    public ServerResponse getPerson(ServerRequest request) {
        // ...
    }
}

处理函数的定义

在编程式路由中,一个请求最终要交给一个处理函数去处理,这就是HandlerFunction。这个函数的入参是ServerRequest和ServerResponse,分别绑定了请求的Request和Response,并且包含了请求的header、Body、状态码等信息。

ServerRequest

ServerRequest包含了请求中的所有信息,如请求方式、请求URL、请求的Header和请求参数等信息,并且提供了请求体相关的访问方法。

  • 如果请求体是String类型的数据,我们可以通过如下示例获取请求体数据:

          String string = request.body(String.class);
  • 如果需要把请求转为对应的Bean,如List ,Spring会把Json或xml数据反序列化为对应的对象:

          List<Pe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-御狐神-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值