怎么在请求方法之前绑定/修改参数值
1.继承或者实现WebMvcConfigurer相关类/接口
①.spring5.0之前 继承WebMvcConfigurerAdapter类
代码如下:
@Configuration
public class UserConfig extends WebMvcConfigurerAdapter {
/**
* 自定义的参数解析器
*/
@Autowired
private UserArgumentResolver userArgumentResolver;
@Override
public void addArgumentResolvers(
List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(userArgumentResolver);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
②.spring5.0之后 实现 WebMvcConfigurer 接口
代码如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private UserArgumentResolver userArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(userArgumentResolver);
}
}
2.添加自定义参数解析器,实现HandlerMethodArgumentResolver接口
代码如下:
@Component
public class UserArgumentResolver implements HandlerMethodArgumentResolver {
String serverName = "OPERATION-DF-ORGANIZATION";
@Autowired
private RestTemplate restTemplate;
/**
* 指定符合条件的参数
* @param methodParameter
* @return
*/
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
String parameterName = methodParameter.getParameterName();
//指定参数名含有userId的
return StringUtils.equals(parameterName,"userId");
}
/**
*
* @param methodParameter
* @param modelAndViewContainer
* @param nativeWebRequest
* @param webDataBinderFactory
* @return
* @throws Exception
*/
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
String userCode = request.getHeader("userCode");
String url = "http://"+serverName+"/data-manager/user/queryByLoginId?login_Id="+userCode;
ObjectRestResponse response = restTemplate.getForObject(url, ObjectRestResponse.class);
LinkedHashMap data = (LinkedHashMap) response.getData();
return data.get("id") == null ? "" : data.get("id").toString();
}
}
3.使用自定义或者修改的参数userId
直接在方法参数前面加上String userId,参数就能绑定成功!