开发环境
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 "";
}
}
- 效果图如下
- - 然后就可以执行对数据的操作了
注:本文为作者原创,转载请附上原作者+本文地址,如有错误或者可以完善之处还请指出,作者一定悉心接受。
以上
敬请知悉!!!!