目錄
一、普通參數(shù):ParameterRequestWrapper
二、HttpHelper請求處理字符串工具類
三、實體json參數(shù):RequestWrapper
四、過濾器:PostFilter
五、Controller
一、普通參數(shù):ParameterRequestWrapper
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
/**
?* 普通參數(shù)設(shè)置
?*
?*/
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參數(shù):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;
/**
?* 請求參數(shù)重寫
?*
?*/
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形式參數(shù)填充(這里新增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: 普通形式參數(shù)填充(這里新增customerId的鍵值)
? ? ? ? ?*/
? ? ? ? HashMap parameterMap = new HashMap(requestWrapper.getParameterMap());
? ? ? ? parameterMap.put("customerId", new String[]{SessionBeanService.getCustomerId().toString()});
? ? ? ? ParameterRequestWrapper newRequest = new ParameterRequestWrapper(requestWrapper, parameterMap);
? ? ? ? /**
? ? ? ? ?* 過濾跳轉(zhuǎn)
? ? ? ? ?*/
? ? ? ? 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 參數(shù),還是普通參數(shù),都能得到自己設(shè)置的值。文章來源:http://www.zghlxwxcb.cn/news/detail-428119.html
也就可以通過這樣的方式設(shè)置所有請求的公共參數(shù)。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-428119.html
到了這里,關(guān)于springboot 參數(shù)統(tǒng)一處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!