Open wangpeng1 opened 11 months ago
这个问题我也挺好奇,就问了下通义,答复如下
在这个场景中,从URL http://localhost:8013/api/dict?page=0&size=10&sort=id%2Cdesc 中传递的查询参数能够被Spring框架自动映射到方法参数DictQueryCriteria resources 和 Pageable pageable 上,这个过程主要依赖于Spring MVC的请求参数绑定机制。具体映射过程大致如下: URL解码与参数解析:首先,Web服务器(如Tomcat)接收到请求后,会对URL进行解码,将 %2C 转换为 , 等,得到实际的查询参数 page=0&size=10&sort=id,desc。 Spring MVC参数绑定: 对于 Pageable pageable: Spring MVC通过检查方法签名中的Pageable类型参数,会自动处理page、size和sort这些常见的分页和排序请求参数。它会将page=0映射到分页的页码,size=10映射到每页大小,而sort=id,desc解析为按照id字段降序排序的规则,然后创建一个PageRequest实例填充这些值,作为Pageable接口的实现。 对于 DictQueryCriteria resources: 这个自定义对象的绑定稍微复杂一些。Spring会尝试使用DictQueryCriteria类中定义的setter方法或构造函数(如果有并且标记了
@NoArgsConstructor
、@AllArgsConstructor
等Lombok注解),与请求中的参数名称匹配。如果请求中有与DictQueryCriteria属性名相同的参数(例如,如果DictQueryCriteria有name属性,而请求中有name=value这样的参数),Spring会自动将这些值设置到DictQueryCriteria对象的相应属性中。如果参数名称不直接匹配,可能需要额外的配置(如@RequestParam
注解来指定参数名)或自定义参数解析器来完成映射。 方法调用:完成参数绑定后,Spring会调用queryDict方法,此时resources和pageable变量已经根据请求参数初始化完毕,可以用于后续的业务逻辑处理。 总之,Spring MVC通过其内置的参数解析机制,依据方法签名和请求参数,自动完成了从HTTP请求参数到Java方法参数的映射。
我的理解:
org.springframework.data.domain.PageRequest#PageRequest
这个构造函数中赋值;DictQueryCriteria resources
为什么没有赋值,大概率是是没有在搜索框内输入条件,如果有输入的话(比如输入1)会变成?page=0&size=10&sort=id%2Cdesc&blurry=1
,这样就会像通义的回答里说的,用setter或者构造函数赋值给DictQueryCriteria类里的字段blurry了
查询字典时候传的参数是http://localhost:8013/api/dict?page=0&size=10&sort=id%2Cdesc 请问他是经过什么过程 queryDict(DictQueryCriteria resources, Pageable pageable)映射到这两个变量上的