spring boot 參數(shù)解析器配置

參數(shù)解析器

參數(shù)解析器的作用是用于將前端請求中的的參數(shù)根據(jù)自定義規(guī)則映射到Controller中的方法的參數(shù)上

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

該請求的目的是表達(dá)搜索條件并分頁顯示。由于搜索條件在項目中使用場景較多且內(nèi)容不固定,所以在Controller方法中無法使用@requestBody等形式進(jìn)行數(shù)據(jù)綁定。

解決思路是自動封裝一個對象,接收并封裝前端提交的搜索條件

類定義如下

public class Searchable {

    // 具體實現(xiàn)

}

定義參數(shù)解析器

public class SearchableMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
    // 判斷是否進(jìn)行參數(shù)解析
    @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();
        
        // 具體實現(xiàn)

        return searchable;
    }

}

resolveArgument方法中將前端提交的參數(shù)轉(zhuǎn)換為Searchable對象的具體實現(xiàn)。

在Controller中,直接使用Searchable作為參數(shù)接收

@Controller
public class FrontController {

    @RequestMapping("/list")
    @ResponseBody
    public Response list(Searchable searchable) {
        //具體實現(xiàn)
    }
}

最后,定義參數(shù)解析器,在項目啟動時加入spring IOC容器

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

當(dāng)HandlerMethodArgumentResolver.supportsParameter判斷可以通過本解析器解析時,執(zhí)行HandlerMethodArgumentResolver.HandlerMethodArgumentResolver。該方法的返回值即是傳入Controller方法的參數(shù)值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,255評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,794評論 25 709
  • 稀缺是一種心態(tài),當(dāng)它俘獲我們的注意力時,就會改變我們的思維方式,影響我們的決策和行為方式。 因為稀缺對我們而言很重...
    愛折騰的小南瓜閱讀 237評論 0 0
  • 女生不要凡事都太好強(qiáng),有時候適當(dāng)?shù)氖救鯐尨蠹叶己谩?/div>
    不ting下腳步閱讀 210評論 0 0

友情鏈接更多精彩內(nèi)容