HandlerMethodArgumentResolver

描述

方法參數(shù)處理器,spring容器收到請求之后,對匹配的方法參數(shù)進(jìn)行處理
通常用法:用戶信息的統(tǒng)一獲取及設(shè)置。

自定義方法參數(shù)處理器:

/**
 * @author zoum
 * @create 2019/10/29 11:16
 */
public class MyArgumentResolver implements HandlerMethodArgumentResolver{

    /**
     * 判斷參數(shù)是否匹配
     * @param methodParameter
     * @return
     */
    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        return methodParameter.getParameterType().isAssignableFrom(LoginUser.class);
    }

    /**
     * 返回匹配參數(shù)的處理結(jié)果
     * @param methodParameter
     * @param modelAndViewContainer
     * @param nativeWebRequest
     * @param webDataBinderFactory
     * @return
     * @throws Exception
     */
    @Nullable
    @Override
    public Object resolveArgument(MethodParameter methodParameter, @Nullable ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, @Nullable WebDataBinderFactory webDataBinderFactory) throws Exception {
        LoginUser loginUser = new LoginUser();
        loginUser.setUsername("zm");
        loginUser.setPassword("zm");
        return loginUser;
    }
}

自定義處理器配置

/**
 * @author zoum
 * @create 2019/10/29 11:13
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer{

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        MyArgumentResolver argumentResolver = new MyArgumentResolver();
        resolvers.add(argumentResolver);
    }
}

定義參數(shù)類型

/**
 * @author zoum
 * @create 2019/10/29 11:28
 */
@Data
public class LoginUser {

    private String username;
    private String password;

}

定義請求方法

@RestController
public class HealthController {

    /**
     * loginUser不需要前臺顯示傳參,通常前端傳值sessionId或者token信息,以此在MyArgumentResolver 處理器里面進(jìn)行獲取并設(shè)置,在請求方法里面就可以直接使用loginUser
     * @param loginUser
     * @return
     */
    @GetMapping("/health")
    public String health(LoginUser loginUser){
        return "ok=" + loginUser.getUsername();
    }
}

測試
請求發(fā)起:http://localhost:8080/health
請求結(jié)果:ok=zm

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

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

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