springboot 参数统一处理

这篇具有很好参考价值的文章主要介绍了springboot 参数统一处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、普通参数:ParameterRequestWrapper

二、HttpHelper请求处理字符串工具类

三、实体json参数:RequestWrapper

四、过滤器:PostFilter

五、Controller

一、普通参数:ParameterRequestWrapper
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import java.util.Enumeration;

import java.util.Map;

import java.util.Vector;

/**

 * 普通参数设置

 *

 */

public class ParameterRequestWrapper extends HttpServletRequestWrapper {

    private Map params;

    public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {

        super(request);

        this.params = newParams;

    }

    @Override

    public Map getParameterMap() {

        return params;

    }

    @Override

    public Enumeration getParameterNames() {

        Vector l = new Vector(params.keySet());

        return l.elements();

    }

    @Override

    public String[] getParameterValues(String name) {

        Object v = params.get(name);

        if (v == null) {

            return null;

        } else if (v instanceof String[]) {

            return (String[]) v;

        } else if (v instanceof String) {

            return new String[]{(String) v};

        } else {

            return new String[]{v.toString()};

        }

    }

    @Override

    public String getParameter(String name) {

        Object v = params.get(name);

        if (v == null) {

            return null;

        } else if (v instanceof String[]) {

            String[] strArr = (String[]) v;

            if (strArr.length > 0) {

                return strArr[0];

            } else {

                return null;

            }

        } else if (v instanceof String) {

            return (String) v;

        } else {

            return v.toString();

        }

    }

}

二、HttpHelper请求处理字符串工具类
import javax.servlet.ServletRequest;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.nio.charset.Charset;

/**

 * 请求处理工具类

 *

 */

public class HttpHelper {

    public static String getBodyString(ServletRequest request) {

        StringBuilder sb = new StringBuilder();

        InputStream inputStream = null;

        BufferedReader reader = null;

        try {

            inputStream = request.getInputStream();

            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));

            String line = "";

            while ((line = reader.readLine()) != null) {

                sb.append(line);

            }

        } catch (IOException e) {

            LogUtils.error(e);

        } finally {

            if (inputStream != null) {

                try {

                    inputStream.close();

                } catch (IOException e) {

                    LogUtils.error(e);

                }

            }

            if (reader != null) {

                try {

                    reader.close();

                } catch (IOException e) {

                    LogUtils.error(e);

                }

            }

        }

        return sb.toString()/*.replaceAll(" ","")*/;

    }

}

三、实体json参数:RequestWrapper
import com.hean.iot.platform.utils.HttpHelper;

import javax.servlet.ServletInputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.nio.charset.Charset;

/**

 * 请求参数重写

 *

 */

public class RequestWrapper extends HttpServletRequestWrapper {

    private byte[] body;

    public RequestWrapper(HttpServletRequest request) {

        super(request);

        body = HttpHelper.getBodyString(request).getBytes(Charset.forName("UTF-8"));

    }

    @Override

    public BufferedReader getReader() throws IOException {

        return new BufferedReader(new InputStreamReader(getInputStream()));

    }

    /**

     * 重写获取 输入流的方法,保证流可写可读多次

     * @return

     * @throws IOException

     */

    @Override

    public ServletInputStream getInputStream() throws IOException {

        final ByteArrayInputStream bais = new ByteArrayInputStream(body);

        return new ServletInputStream() {

            @Override

            public int read() throws IOException {

                return bais.read();

            }

        };

    }

    public byte[] getBody() {

        return body;

    }

    public void setBody(byte[] body) {

        this.body = body;

    }

}

四、过滤器:PostFilter
import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.hean.iot.platform.model.RequestWrapper;

import com.hean.iot.platform.session.SessionBeanService;

import org.springframework.context.annotation.Configuration;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

import java.io.BufferedReader;

import java.io.IOException;

import java.util.HashMap;

/**

 * 过滤器

 *

 */

@Configuration

@WebFilter(filterName = "authFilter", urlPatterns = {"/*"})

public class PostFilter implements Filter {

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

            throws IOException, ServletException {

        /*

         * @Date: 2021/1/18 14:59

         * Step 1: 重写 RequestWrapper,重写获取流的方法

         */

        RequestWrapper requestWrapper = new RequestWrapper((HttpServletRequest) request);

        /*

         * @Date: 2021/1/18 14:59

         * Step 2: 读取输入流,将所需信息写入

         * json形式参数填充(这里新增customerId的键值)

         */

        StringBuffer buffer = new StringBuffer();

        String line = null;

        BufferedReader reader = null;

        reader = requestWrapper.getReader();

        while ((line = reader.readLine()) != null) {

            buffer.append(line);

        }

        JSONObject object = JSON.parseObject(buffer.toString());

        object.put("customerId", SessionBeanService.getCustomerId());

        requestWrapper.setBody(object.toString().getBytes());

        /*

         * @Date: 2021/1/18 15:00

         * Step 3: 普通形式参数填充(这里新增customerId的键值)

         */

        HashMap parameterMap = new HashMap(requestWrapper.getParameterMap());

        parameterMap.put("customerId", new String[]{SessionBeanService.getCustomerId().toString()});

        ParameterRequestWrapper newRequest = new ParameterRequestWrapper(requestWrapper, parameterMap);

        /**

         * 过滤跳转

         */

        chain.doFilter(newRequest, response);

    }

    @Override

    public void destroy() {

    }

    @Override

    public void init(FilterConfig config) throws ServletException {

    }

}

五、Controller
@RequestMapping("/findDropDown.do")

@ResponseBody

public BaseResult findAlarmGradeDropDown(@RequestBody DropDownDto condition, String customerId) throws Exception {

    return rslt;

}

这样,不管是@RequestBody 参数,还是普通参数,都能得到自己设置的值。

也就可以通过这样的方式设置所有请求的公共参数。
 文章来源地址https://www.toymoban.com/news/detail-428119.html

到了这里,关于springboot 参数统一处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 统一功能的处理

    1.1 最初用户登录验证 从上述代码中可以看出每个方法都相同的登录权限校验 , 这样做的缺点是: 每个方法中都要单独写用户登录验证的方法 , 即使封装成公共方法 , 也一样要在方法中传参判断. 添加控制器越多, 调用用户登录的方法也越多 , 这样后期会增大维护成本. 用户登录

    2024年02月16日
    浏览(35)
  • SpringBoot 统一功能处理

    登录、注册页面不拦截,其他页面都拦截 当登录成功写入 session 之后,拦截的页面可正常访问 调用顺序: 正常情况下,程序会在调用 Controller 之前进行相应的业务处理(我们在切面中定义的事务),业务通过后,才会调用Controller 层,然后就是Controller - Serrvice - Mapper - 数据

    2024年01月24日
    浏览(35)
  • springboot的统一处理

    在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。 拦截器的实现分为以下两个步骤: 创建⾃定义拦截器,实现 HandlerInterc

    2023年04月08日
    浏览(31)
  • springboot全局统一返回处理

    项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式; 一般而言都会有一个统一的返回类作为接口的返回数据的封装,例如: 然后我们通过此类作为返回参数的统一封装

    2024年02月13日
    浏览(39)
  • SpringBoot—统一功能处理

    利用 AOP 的思想对一些特定的功能进行统一的处理, 包括 使用拦截器实现用户登录权限的统一校验 统一异常的处理 统一数据格式的返回 通过一级路由调用多种方法, 需要保证这些方法的请求类型各不相同(GET, POST, PUT…) 使用 Spring AOP 可以实现统一拦截, 但 Spring AOP 的使用较为

    2024年02月13日
    浏览(33)
  • SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

    小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场

    2024年02月01日
    浏览(45)
  • springboot 统一异常处理 + 日志记录

          在项目的开发中,在某些情况下,比如非业务的操作,日志记录,权限认证和异常处理等。我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect。先简单介绍一下不同的拦截方式。 可以获得Http原始的请求和响应信息,

    2023年04月17日
    浏览(46)
  • 【Spring】SpringBoot 统一功能处理

    在日常使用 Spring 框架进行开发的时候,对于一些板块来说,可能需要实现一个相同的功能,这个功能可以是验证你的登录信息,也可以是其他的,但是由于各个板块实现这个功能的代码逻辑都是相同的,如果一个板块一个板块进行添加的话,开发效率就会很低,所以 Spring

    2024年01月18日
    浏览(40)
  • SpringBoot第14讲:SpringBoot 如何统一异常处理

    本文是SpringBoot第14讲,SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例, 如何优雅的将参数校验的错误信息统一处理并封装返回呢

    2024年02月11日
    浏览(48)
  • springboot~mybatis统一处理公有字段

    对于实体中包含有公共字段,像create_at,create_time,update_at,update_time来说,我们没有必要在每个实体的crud操作中复制同样的代码,这样代码的味道很坏,我们应该使用mybatis的拦截器机制,将公共字段统一处理;当然mybatis-puls在实现上更加优雅,它帮我们封装了 MetaObjectHandler 接口

    2024年04月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包