spring boot 参数解析器配置

参数解析器

参数解析器的作用是用于将前端请求中的的参数根据自定义规则映射到Controller中的方法的参数上

例如前端请求如下
http://127.0.0.1:8080/portal/union/staff/1?search.name_like=scott&search.age_gt=20&page.pn=1&page.size=10

该请求的目的是表达搜索条件并分页显示。由于搜索条件在项目中使用场景较多且内容不固定,所以在Controller方法中无法使用@requestBody等形式进行数据绑定。

解决思路是自动封装一个对象,接收并封装前端提交的搜索条件

类定义如下

public class Searchable {

    // 具体实现

}

定义参数解析器

public class SearchableMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
    // 判断是否进行参数解析
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        
        return Searchable.class.isAssignableFrom(parameter.getParameterType());
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        
        Searchable searchable = new Searchable();
        
        // 具体实现

        return searchable;
    }

}

resolveArgument方法中将前端提交的参数转换为Searchable对象的具体实现。

在Controller中,直接使用Searchable作为参数接收

@Controller
public class FrontController {

    @RequestMapping("/list")
    @ResponseBody
    public Response list(Searchable searchable) {
        //具体实现
    }
}

最后,定义参数解析器,在项目启动时加入spring IOC容器

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    
    /**
     * searchable参数解析器
     */
    @Override
    protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(searchableMethodArgumentResolver());
        
    }
    
    private SearchableMethodArgumentResolver searchableMethodArgumentResolver() {
        SearchableMethodArgumentResolver searchableMethodArgumentResolver = new SearchableMethodArgumentResolver();
        return searchableMethodArgumentResolver;
    }
}

当HandlerMethodArgumentResolver.supportsParameter判断可以通过本解析器解析时,执行HandlerMethodArgumentResolver.HandlerMethodArgumentResolver。该方法的返回值即是传入Controller方法的参数值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,800评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,118评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,901评论 25 709
  • 稀缺是一种心态,当它俘获我们的注意力时,就会改变我们的思维方式,影响我们的决策和行为方式。 因为稀缺对我们而言很重...
    爱折腾的小南瓜阅读 1,196评论 0 0
  • 女生不要凡事都太好强,有时候适当的示弱会让大家都好。
    不ting下脚步阅读 1,339评论 0 0