博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HandlerMethodArgumentResolver完美解决 springmvc注入参数多传报错
阅读量:6256 次
发布时间:2019-06-22

本文共 2472 字,大约阅读时间需要 8 分钟。

作为一个后端开发,能友好兼容前端参数传入错误等问题,在前端发布不小心多传一个参数导致系统错误的问题,一个广告系统是零容忍的,所以为了不犯错误,后端接收参数必须摒弃spring 的自动注入@RequestBody,

1、那么我们就要自定义解析器重写HandlerMethodArgumentResolver的两个方法

package com.qlkj.jgt.flow.app.resolver;import com.alibaba.fastjson.JSONObject;import com.fqgj.jkzj.common.base.BaseSO;import com.fqgj.jkzj.common.base.BaseVO;import org.apache.commons.io.IOUtils;import org.springframework.core.MethodParameter;import org.springframework.web.bind.support.WebDataBinderFactory;import org.springframework.web.context.request.NativeWebRequest;import org.springframework.web.method.support.HandlerMethodArgumentResolver;import org.springframework.web.method.support.ModelAndViewContainer;import javax.servlet.http.HttpServletRequest;import java.io.IOException;/** * @author vampire * @date 2019/3/28 4:41 PM */public class CustomArgumentResolver implements HandlerMethodArgumentResolver {    @Override    public boolean supportsParameter(MethodParameter methodParameter) {        Class paramObjClass = methodParameter.getParameterType();       //这里我定义的是如果入参为继承基类的时候就进入这个自定义参数解析方法中        if (BaseSO.class.isAssignableFrom(paramObjClass)) {            return true;        }        return false;    }    @Override    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {        Class paramObjClass = parameter.getParameterType();        String json = getRequestBody(webRequest);        Object paramObj = paramObjClass.newInstance();        Object object = JSONObject.parseObject(json, paramObjClass);        return object != null ? object : paramObj;    }    private String getRequestBody(NativeWebRequest webRequest) {        HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);        String jsonBody = (String) webRequest.getAttribute("params", NativeWebRequest.SCOPE_REQUEST);        if (jsonBody == null) {            try {                jsonBody = IOUtils.toString(servletRequest.getInputStream());                webRequest.setAttribute("params", jsonBody, NativeWebRequest.SCOPE_REQUEST);            } catch (IOException e) {                throw new RuntimeException(e);            }        }        return jsonBody;    }}

2、xml加入我们的自定义解析器

 

3、入参是要注意  入参前不能添加 @RequestBody  否则走的是spring默认的注入参数

 

转载于:https://www.cnblogs.com/likun10579/p/10969503.html

你可能感兴趣的文章
弧度和角度的转换
查看>>
[leetcode]Unique Paths II @ Python
查看>>
nginx源码分析之hash的实现
查看>>
数据结构快速回顾——二叉树 解幂子集问题
查看>>
选择排序
查看>>
使用微软 URL Rewrite Module 开启IIS伪静态
查看>>
浅谈UML中类之间的五种关系及其在代码中的表现形式
查看>>
原创:CentOS6.4配置solr 4.7.2+IK分词器
查看>>
cocos2d(3.0)一些基础的东西
查看>>
jQuery动画animate方法使用介绍
查看>>
自适应网页设计(Responsive Web Design)
查看>>
[C#]Hosting Process (vshost.exe)
查看>>
spring beans源码解读之--bean definiton解析器
查看>>
mysql索引优化
查看>>
Async Performance: Understanding the Costs of Async and Await
查看>>
POJ3352Road Construction(构造双连通图)sdut2506完美网络
查看>>
[原]Android打包之跨平台打包
查看>>
Linq的Distinct方法的扩展
查看>>
Union-Find 检测无向图有无环路算法
查看>>
RDIFramework.NET ━ 9.4 角色管理 ━ Web部分
查看>>