java万能实体类PageData

开发环境

Myeclipce+Spring Boot+tomcat-8.0.50+jdk1.8

简介

这是一个获取前端get/post数据的工具类,简单,方便,易理解。
由于用pojo或者request.getParameter,@RequestParam注解来接收数据有很大的局限性,每次接受新的参数都需要去entry里面配置,所以还是用map来的方便,所以写了一个方便实用的工具类,详细代码如下!!!

详细代码

注:该工具类仅用于json格式的数据,没有json则需如下几步操作!!!!

  • 首先引入gson的Maven依赖
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>
  • 再往下就是json的工具类,通过代码可以清晰的看出该工具类的使用方法,方法都是静态的,可以直接被类名调用!!
import java.lang.reflect.Type;

import com.google.gson.Gson;

/**
 * Json工具类-gson实现
 *
 */
public class JsonUtil {

    private static Gson gson = null;
    static {
        if (gson == null) {
            gson = new Gson();
        }
    }
    /**
     * 对象转Json字符串-gson实现
     * 
     * @param object 对象
     * @return Json字符串
     */
    public static String ObjectToJson(Object object) {
        return gson.toJson(object);
    }

    /**
     * Json字符串转对象-gson实现
     * 
     * @param json
     * @param clazz
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T JsonToObject(String json, Class<T> clazz) {
        return (T) gson.fromJson(json, (Type) clazz);
    }
}

  • 首先封装map工具类肯定需要实现Map接口,HashMap是Map接口的主要实现类,所以也需要继承一下,
    如下把Map,Request定义成全局变量,然后通过方法为其赋值!!
  • get请求主要使用ParameterMap进行获取,post请求主要使用字节流进行获取,详细代码注释如下,每一步都有相应的注释,
    该工具类可直接使用

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util. *;

import javax.servlet.http.HttpServletRequest;

import org.apache.http.protocol.HTTP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 *功能描述: 接收参数
 *
 *2019年6月8日
 */
@SuppressWarnings( "rawtypes" )
public class EndData extends HashMap implements Map{
    //定义全局变量,方便为其赋值
	Map map=null;
	HttpServletRequest request;
	private static final long serialVersionUID = 1L;
	private static final Logger log = LoggerFactory.getLogger(EndData.class);
	//得到Request
	public HttpServletRequest getRequest() {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
				.getRequest();
		return request;
	}
	@SuppressWarnings({ "unchecked", "deprecation" })
	public EndData(HttpServletRequest request) {
		//获取本类中的request
		request=this.getRequest();
		try {
			request.getInputStream();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//获取传递数据的格式(GET和POST区分处理)
		String methodString=request.getMethod();
		if("GET".equals(methodString)) {
			//get请求可直接用ParameterMap获取
			Map<String,String[]>properties=request.getParameterMap();
			Map returnMap=new HashMap();
			//遍历从前端获取的Map集合
			Iterator rntriesIterator=properties.entrySet().iterator();
			Map.Entry entry;
			String nameString="";
			String valueString="";
			while (rntriesIterator.hasNext()) {
				entry=(Map.Entry)rntriesIterator.next();
				nameString = (String) entry.getKey();
				Object valueObj = entry.getValue();
				if (null == valueObj) {
					valueString = "";
				} else if (valueObj instanceof String[]) {
					String[] values = (String[]) valueObj;
					for (int i = 0; i < values.length; i++) {
						valueString = values[i] + ",";
					}
					valueString = valueString.substring(0, valueString.length() - 1);
				} else {
					valueString = valueObj.toString();
				}
				
				returnMap.put(nameString, valueString);
			}
			map = returnMap;
		}else if("POST".equals(methodString)) {
			BufferedReader br = null;
			EndData ed = null;
			try {
				//获取Request传递数据的字节流,以缓存字节读取方式从字节流中读取数据,先把字节流转换成字符导向的stream,再进行BufferedReader封装。
				br = new BufferedReader(new InputStreamReader(this.getRequest().getInputStream()));
				String line = null;
				//创建一个可变的字符串变量用来存储前端传的json字符串
				StringBuilder sb = new StringBuilder();
				while ((line = br.readLine()) != null) {
					//循环拼接数据资料
					sb.append(line);
				}
				// 将资料解码
				String reqBody = sb.toString();
				//由于web容器默认请求的编码方式是URIEncoding,所以使用URLDecoder进行解码
				String decodeBody = URLDecoder.decode(reqBody, HTTP.UTF_8);
				//然后使用json工具类转换成我们自己封装的Map进行返回
				ed = JsonUtil.JsonToObject(decodeBody, EndData.class);
			} catch (IOException e) {
				log.error("restApiController getDataFromPost IOException1:" + e.getMessage());
			} finally {
				//判断是否为空,然后进行关流
				if (br != null) {
					try {
						br.close();
					} catch (IOException e) {
						log.error("restApiController getDataFromPost IOException2:" + e.getMessage());
					}
				}
			}
			//将ed重新赋值给map
			map=ed;
		}
		}
	public EndData() {
		map = new HashMap();
	}
	//得到EndData
	public EndData getEndData() {
		return new EndData(this.getRequest());
	}
	//普通获取
	@Override
	public Object get(Object key) {
		Object obj = null;
		if (map.get(key) instanceof Object[]) {
			Object[] arr = (Object[]) map.get(key);
			obj = request == null ? arr : (request.getParameter((String) key) == null ? arr : arr[0]);
		} else {
			obj = map.get(key);
		}
		return obj;
	}

	//下面的代码只是重写了Map的方法
	public String getString(Object key) {
		return (String) get(key);
	}
	//正常的map存入键值对
	@SuppressWarnings("unchecked")
	@Override
	public Object put(Object key, Object value) {
		return map.put(key, value);
	}
    //删除
	@Override
	public Object remove(Object key) {
		return map.remove(key);
	}
    //清空Map
	public void clear() {
		map.clear();
	}
	//判断Key是否存再
	public boolean containsKey(Object key) {
		// TODO Auto-generated method stub
		return map.containsKey(key);
	}
	//判断某Value是否存在
	public boolean containsValue(Object value) {
		// TODO Auto-generated method stub
		return map.containsValue(value);
	}
	//获取Key,value的set
	public Set entrySet() {
		// TODO Auto-generated method stub
		return map.entrySet();
	}
	//判断Map是否为空
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return map.isEmpty();
	}
	
	public Set keySet() {
		// TODO Auto-generated method stub
		return map.keySet();
	}
	
	//Map结合
	@SuppressWarnings("unchecked")
	public void putAll(Map t) {
		// TODO Auto-generated method stub
		map.putAll(t);
	}
	//Map长度
	public int size() {
		// TODO Auto-generated method stub
		return map.size();
	}

	public Collection values() {
		// TODO Auto-generated method stub
		return map.values();
	}

}

使用方法

  • 使用Controller继承一下工具类,然后获取,利用get方法就可以取到前端所传过来的值了!!!
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.xb.util.EndData;

/**
 * 
 *2019年6月8日
 */
@RestController
public class TestComtroller extends EndData {

	@RequestMapping("/test2")
	@ResponseBody
	public String test2(HttpServletRequest Request,HttpServletResponse Response) {
		EndData ed=this.getEndData();
		System.out.println(ed.get("phone"));
		System.out.println(ed.get("name"));
		return 	"";
	}
}
  • 效果图如下
    -在这里插入图片描述
  • 然后就可以执行对数据的操作了
    注:本文为作者原创,转载请附上原作者+本文地址,如有错误或者可以完善之处还请指出,作者一定悉心接受。
    以上
    敬请知悉!!!!
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.model; import javax.servlet.http.HttpServletRequest; import java.util.*; /** * 说明:参数封装Map * @version */ public class PageData extends HashMap implements Map{ private static final long serialVersionUID = 1L; Map map = null; HttpServletRequest request; public PageData(HttpServletRequest request){ this.request = request; Map properties = request.getParameterMap(); Map returnMap = new HashMap(); Iterator entries = properties.entrySet().iterator(); Entry entry; String name = ""; String value = ""; while (entries.hasNext()) { entry = (Entry) entries.next(); name = (String) entry.getKey(); Object valueObj = entry.getValue(); if(null == valueObj){ value = ""; }else if(valueObj instanceof String[]){ String[] values = (String[])valueObj; for(int i=0;i<values.length;i++){ value = values[i] + ","; } value = value.substring(0, value.length()-1); }else{ value = valueObj.toString(); } returnMap.put(name, value); } map = returnMap; } public PageData() { map = new HashMap(); } @Override public Object get(Object key) { Object obj = null; if(map.get(key) instanceof Object[]) { Object[] arr = (Object[])map.get(key); obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]); } else { obj = map.get(key); } return obj; } public static boolean hasVal(PageData pd,String key){ return pd!=null&&pd;.containsKey(key)&&!pd.getString(key).isEmpty(); } public String getString(Object key) { return (String)get(key); } public Integer getInt(Object key) { return Integer.parseInt(getString(key)); } @SuppressWarnings("unchecked") @Override public Object put(Object key, Object value) { return map.put(key, value); } @Override public Object remove(Object key) { return map.remove(key); } public void clear() { map.clear(); } public boolean containsKey(Object key) { // TODO Auto-generated method stub

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值