当前位置:   article > 正文

SpringMVC 解析(四)编程式路由_spring webmvc 动态注册路由

spring webmvc 动态注册路由

多数情况下,我们在使用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) {
        // ...
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

处理函数的定义

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

ServerRequest

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

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

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

            List<
      声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/335471
      推荐阅读
      相关标签
        

      闽ICP备14008679号