SpringBoot修改传入接口的参数

Spring Boot(v1.5.9.RELEASE)
  • 效果:
    请求 "/test?objClientModel={ReplaceValue:'d',ReplaceValueLike:'rep',ProjectGroup:'3'}"时,
    "/test" 所在的控制器获取到两对象  :
    一个是客户端传入的ClientModel实例
    一个是自定义的对象CustomModel实例( 可以作为session信息传入, 在调用test方法前先通过sessionid或者其他信息从redis获取登录信息,  并写入到一个CustomModel实例然后传入test,  这样就能使用登录信息 )
    
  • api目标方法:

@RestController
public class testController {
    @RequestMapping(value = "/test")
    public String test(ClientModel objClientModel, CustomModel objCustomModel){
        return "success";
    }
}
  • 实现 HandlerMethodArgumentResolver 接口:

    supportsParameter 筛选需要进行自定义的类的逻辑, 这里需要设置先不做过滤, 把过滤规则写到resolveArgument里, 
    否则可能要写多个实现 HandlerMethodArgumentResolver 接口的实现类, 每一个都在supportsParameter配置规则:
    
    resolveArgument 在调用test方法前, 会先遍历方法的参数,  每次都会调用resolveArgument, 这里只处理CustomModel类, 其他类的参数直接反序列化为对应对象传入.
    
package configcenter.aop;
public class ParamHandler implements HandlerMethodArgumentResolver {
	@Override
	public boolean supportsParameter(MethodParameter methodParameter) {
		return true;
	}

	@Override
	public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,
								  NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
		if (methodParameter.getParameterType() == CustomModel.class){
			CustomModel objCustomModel = new CustomModel();
			objCustomModel.ConfigName = "文件保存路径";
			objCustomModel.ConfigValue = "/var/project/static/files/";
			objCustomModel.SystemName = "filePath";
			return objCustomModel;
		}
		//获取本次请求
		HttpServletRequest objHttpServletRequest = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
		//通过参数名获取请求的参数
		String clientParam = objHttpServletRequest.getParameter(methodParameter.getParameterName());
		Object obj = new Gson().fromJson(clientParam, methodParameter.getParameterType());
		return obj;
    }
}
  • 在项目配置类注册上面的参数解析器
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
		//argumentResolvers.add(new RquestParamResolver());
        argumentResolvers.add(new ParamHandler());
    }
}
  • 重启项目, 正常运行.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值