怎么在SpringBoot中利用WebMvcConfigurer實現(xiàn)參數(shù)校驗?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
十余年的廣昌網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整廣昌建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“廣昌網(wǎng)站設(shè)計”,“廣昌網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
現(xiàn)有兩種解決方案
1 直接實現(xiàn)WebMvcConfigurer (官方推薦)
2 直接繼承WebMvcConfigurationSupport
本篇文章討論下使用第一種方式完成參數(shù)校驗。
首先附上代碼。
@Slf4j @Controller @RequestMapping("/goods") public class GoodsController { @Autowired MiaoshaUserService miaoshaUserService; // @GetMapping("/to_list") // public String toList(Model model, MiaoshaUser miaoshaUser) { // model.addAttribute("miaoshaUser",miaoshaUser); // return "list"; // } @GetMapping("/to_list") public String toList(Model model, HttpServletResponse response, @CookieValue(value = MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN,required = false)String cookieToken, @RequestParam(value = MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN,required = false)String paramToken) { if(StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)){ return "login"; } String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken; MiaoshaUser miaoshaUser = miaoshaUserService.getByToken(response,token); model.addAttribute("miaoshaUser",miaoshaUser); return "list"; } }
toList需要實現(xiàn)的功能是在cookie或requestParam中獲取到token,通過token去redis中獲取詳細的用戶信息,再將用戶信息放到頁面進行展示。上面?zhèn)鹘y(tǒng)的方式入?yún)⒂蟹浅6啵詈笮枰氖悄玫組iaohshaUser對象,在程序的實際編寫過程中,會有許多方法需要經(jīng)過這樣的過程獲取到該對象,如何精簡下代碼,在入?yún)⒅挥行枰@取的對象的時候,經(jīng)過一系列的操作從cookie拿到token以及redis獲取具體對象呢?
下面通過實現(xiàn)WebMvcConfigurer接口來實現(xiàn)。
/** * @author hsw * @Date 10:12 2018/5/8 */ @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired UserArgumentResolver userArgumentResolver; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(userArgumentResolver); } }
新建一個WebConfig類實現(xiàn)WebMvcConfigurer接口,WebMvcConfigurer是一個攔截器,里面有非常多的方法,我們用到的是addArgumentResolvers方法。需要注意的是類頭需要加上@Configuration注解將該類交給spring管理。
addArgumentResolvers具體內(nèi)容后文會提到。
新建UserArgumentResolver類實現(xiàn)HandlerMethodArgumentResolver接口
實現(xiàn)HandlerMethodArgumentResolver接口需要重寫supportsParameter方法和resolveArgument方法。
resolveArgument中從cookie或requestparam中獲取token值,并從redis中查詢到具體的MiaoshaUser信息并返回。
UserArgumentResolver類編寫完成后,在上面的WebConfig類中的addArgumentResolvers方法中將UserArgumentResolver類的實例添加進argumentResolvers參數(shù)中即可。
這兩個類完成后,controller類中的toList方法如第一段注釋代碼所示。
/** * @author hsw * @Date 10:25 2018/5/8 */ @Service public class UserArgumentResolver implements HandlerMethodArgumentResolver { @Autowired MiaoshaUserService userService; /* * Miaoshauser類做參數(shù)校驗 * @author hsw * @date 2018/5/8 10:49 * @param [methodParameter] * @return boolean */ @Override public boolean supportsParameter(MethodParameter methodParameter) { Class<?> clazz = methodParameter.getParameterType();//如若不是MiaoshaUser類不進行接下來操作 return clazz == MiaoshaUser.class; } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { HttpServletRequest request =nativeWebRequest.getNativeRequest(HttpServletRequest.class);//獲取HttpServletRequest HttpServletResponse response =nativeWebRequest.getNativeResponse(HttpServletResponse.class);//獲取HttpServletResponse String paramToken = request.getParameter(MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN); String cookieToken = getCookieValue(request,MiaoshaUserServiceImpl.COOKIE_NAME_TOKEN); if(StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)){ return null; } String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken; return userService.getByToken(response,token);//通過token查詢詳細信息并返回,返回類為MiaoshaUser } private String getCookieValue(HttpServletRequest request, String cookieName) { Cookie[] cookies = request.getCookies(); for(Cookie cookie:cookies){ if(cookie.getName().equals(cookieName)){ return cookie.getValue(); } } return null; } }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
文章名稱:怎么在SpringBoot中利用WebMvcConfigurer實現(xiàn)參數(shù)校驗
網(wǎng)頁路徑:http://bm7419.com/article46/goejeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、企業(yè)建站、商城網(wǎng)站、手機網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)