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 参数,还是普通参数,都能得到自己设置的值。

也就可以通过这样的方式设置所有请求的公共参数。

相关文章
|
6月前
|
前端开发 Java
SpringBoot之数组,集合,日期参数的详细解析
SpringBoot之数组,集合,日期参数的详细解析
131 0
|
6月前
|
Java 数据库连接 Spring
Spring Boot命令行启动添加参数
Spring Boot命令行启动添加参数
192 0
|
1月前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
2月前
|
缓存 前端开发 Java
springboot 的单体服务 字典参数转译
本文介绍了如何在Spring Boot项目中使用缓存来管理字典参数,并确保前后端数据一致性。首先,通过`@EnableCaching`启用缓存功能,接着创建一个自定义的字典缓存类`DicCache`。然后,通过配置类将`DicCache`添加到`cacheManager`中。此外,对字典服务进行改造,使用`@CachePut`和`@CacheEvict`注解保证数据一致性。最后,实现自定义注解`@DicSerializer`和序列化处理类`DictSerializerHandel`,用于在序列化过程中自动转换字典值。通过这种方式,可最小化代码改动并提高系统性能。
springboot 的单体服务 字典参数转译
|
6月前
|
Java Spring
SpringBoot接收参数的方式
本文介绍了Java Spring Boot中处理GET请求的多种方式。可以使用方法参数直接接收,或者通过`@RequestParam`注解指定必传参数。此外,可以用实体类接收多个相关参数,但不能同时使用`@RequestParam`。还可以通过`HttpServletRequest`对象获取参数,或利用`@PathVariable`接收路径变量。对于数组和集合参数,需注意使用`@RequestParam`注解。
231 1
|
30天前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
111 0
|
2月前
|
Java Spring
spring boot 启动项目参数的设定
spring boot 启动项目参数的设定
|
3月前
|
Java API 数据格式
Spring Boot API参数读取秘籍大公开!6大神器助你秒变参数处理大师,让你的代码飞起来!
【8月更文挑战第4天】Spring Boot凭借其便捷的开发和配置特性,成为构建微服务的热门选择。高效处理HTTP请求参数至关重要。本文介绍六种核心方法:查询参数利用`@RequestParam`;路径变量采用`@PathVariable`;请求体通过`@RequestBody`自动绑定;表单数据借助`@ModelAttribute`或`@RequestParam`;请求头使用`@RequestHeader`;Cookie则依靠`@CookieValue`。每种方法针对不同场景,灵活运用可提升应用性能与用户体验。
65 9
|
4月前
|
Java 测试技术 Spring
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息