描述
方法參數(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