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 argumentResolvers) {
        argumentResolvers.add(searchableMethodArgumentResolver());
        
    }
    
    private SearchableMethodArgumentResolver searchableMethodArgumentResolver() {
        SearchableMethodArgumentResolver searchableMethodArgumentResolver = new SearchableMethodArgumentResolver();
        return searchableMethodArgumentResolver;
    }
}

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

你可能感兴趣的:(spring boot 参数解析器配置)