api拆分(数据传递和接收的几种方式)
传递方式一:对象转String
接收:String类型接收再转对象
传递方式二:Map
接收:Map
传递方式三:json(Map转json)
接收:String转Map
传递方式四:Map里放json对象
反接收:json转String转Map
接收:Map(this.getParamMap(request))接收,Map转对象
传递方式五:(对象转json)直接传对象
接收:String接收再转对象
反接收几种形式:
1. 对象
2. List<对象>
3. List<Map>
4. Map
/**
* JSON转对象
* @param str
* @param clazz
* @return
*/
public static <T> T fastJsonStringToEntity(String str, Class<T> clazz) { T object = com.alibaba.fastjson.JSON.parseObject(str, clazz);
return object;
}
/**
* JSON转list
* @param str
* @param clazz
* @return
*/
public static <T> List<T> fastJson2EntityList(String str, Class<T> clazz) {
try{
List<T> list = com.alibaba.fastjson.JSON.parseArray(str, clazz);
return list;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* JSON转List<Map>
* @param jsonValue
* @return
*/
public static List<Map<String, Object>> fastJson2MapList(String jsonValue) {
List<Map<String, Object>> list = new LinkedList<Map<String, Object>>();
try{
com.alibaba.fastjson.JSONArray array = com.alibaba.fastjson.JSON.parseArray(jsonValue);
for(int i = 0; i < array.size(); i++) {
Map<String, Object> map = convert2MapObject(array.get(i).toString());
if(map != null) {
list.add(map);
}
}
}catch (Exception e) {
}
return list;
}
/**
* JSON转Map
* @param jsonValue
* @return
*/
public static Map<String, Object> convert2MapObject(String jsonValue) {
try{
Map<String, Object> map = JSON.parseObject(jsonValue, new TypeReference<HashMap<String, Object>>(){});
return map;
}catch (Exception e) { } return null;
}
/**
* list转JSON
* @param <T>
* @param str
* @param clazz
* @return
*/
public static <T> String fastList2Json(List<T> list) {
//list转换为json
try{
String str= com.alibaba.fastjson.JSON.toJSON(list).toString();
return str;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
注意事项:
1.注意API的返回值不要转换两次JSON,现在有些API的JSON被转换了两次;
2.Get数据时,大部分条件改为普通的a=1&b=2的传参方式;
特别是只需要一个参数的查询,如只需要orderID;
没必要使用json的方式post查询参数。这样不容易测试,也不能简单通过浏览器查看。
注意一个原则:一般情况的get数据,都用普通的a=1&b=2的传参,除非需要一些特别的list类型等等,再修改为json。
3.API请求或者返回时不要传递混合参数,如一部分参数是json,一部分是普通参数,这样是不行的。
附:json与String类型转换工具类
package com.echemi.b2b.market.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* @desc json与String类型转换通用方法
*/
@Service
public class JsonConvertUtil {
private static final String CACHE_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* Json转换成String
* @param jsonObj
* @return
*/
public static String jsonToString(JSONObject jsonObj) {
return jsonObj.toString();
}
/**
* Json中的特定字段转换成String
* @param jsonObj
* @return
*/
public static String jsonToStringKey(JSONObject jsonObj, String key) {
JSONObject jsonObject = JSONObject.fromObject(jsonObj);
return jsonObject.get(key).toString();
}
/**
* Json中的特定字段转换成String
* @param jsonObj
* @return
*/
public static JSONObject jsonToJsonKey(JSONObject jsonObj, String key) {
JSONObject jsonObject = JSONObject.fromObject(jsonObj);
return (JSONObject) jsonObject.get(key);
}
/**
* Json转换成Entity
* @param jsonObj
* @param clazz
* @return
*/
@SuppressWarnings({ "unchecked", "hiding" })
public static <T> T jsonToEntity(JSONObject jsonObj, Class<T> clazz) {
T entity = (T) JSONObject.toBean(jsonObj, clazz);
return entity;
}
/**
* Entity装换成Json
* @return
*/
public static JSONObject entityToJson(Object entity) {
JSONObject jsonObj = JSONObject.fromObject(entity);
return jsonObj;
}
/**
* String转换成Json
* @param str
* @return
*/
public static JSONObject stringToJson(String str) {
JSONObject obj = JSONObject.fromObject(str);
return obj;
}
/**
* Json转换成Entity
* @param clazz
* @return
*/
@SuppressWarnings({ "unchecked", "hiding" })
public static <T> T stringToEntity(String str, Class<T> clazz) {
JSONObject obj = JSONObject.fromObject(str);
T entity = (T) JSONObject.toBean(obj, clazz);
return entity;
}
/**
* 数组转换成Json
* @param object
* @return
*/
public static String array2json(Object object) {
JSONArray jsonArray = JSONArray.fromObject(object);
return jsonArray.toString();
}
/**
* 时间格式化通用处理
* @param jsonObject
* @param description
* @param obj
*/
public static void jsonDateFormat(JSONObject jsonObject, String description, Object obj){
JSONArray jsonArray = new JSONArray();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(Boolean.class, new JsonDateValueProcessor());
jsonArray = JSONArray.fromObject(obj, jsonConfig);
jsonObject.put(description, jsonArray);
}
public static JSONArray jsonDateFormat(Object obj){
JSONArray jsonArray = new JSONArray();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(Boolean.class, new JsonDateValueProcessor());
jsonArray = JSONArray.fromObject(obj, jsonConfig);
return jsonArray;
}
/**
* json string 转换为 map 对象
* @param jsonObj
* @return
*/
public static Map<String, String> jsonToMap(Object jsonObj) {
JSONObject jsonObject = JSONObject.fromObject(jsonObj);
Map<String, String> map = (Map<String, String>)jsonObject;
return map;
}
/**
* 时间格式化通用处理
* 作者:Daniel
* @param obj
*/
public static Map dateFormat( Object obj){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(Boolean.class, new JsonDateValueProcessor());
JSONObject json = JSONObject.fromObject(obj, jsonConfig);
return parserToMap(json.toString());
}
public static Map parserToMap(String s){
Map map = new HashMap();
JSONObject json=JSONObject.fromObject(s);
Iterator keys=json.keys();
while(keys.hasNext()){
String key=(String) keys.next();
String value=json.get(key).toString();
if(value.startsWith("{")&&value.endsWith("}")){
map.put(key, parserToMap(value));
}else{
map.put(key, value);
}
}
return map;
}
/**
* 将jsonArray转换成List
* @param s
* @return
*/
public static List<Map<String, Object>> parserToList(JSONArray ja){
if (ja == null) {
return null;
}
List<Map<String, Object>> list2 = JSONArray.toList(ja, new HashMap<String, Object>(), new JsonConfig());//参数1为要转换的JSONArray数据,参数2为要转换的目标数据,即List盛装的数据
//Person person = (Person) list2.get(0);
//System.out.println(person.getAge());
return list2;
}
/**
* 统一JSON转换格式(FastJson)
* @param object
* @return
*/
public static String toFastJsonString(Object object) {
SerializeConfig config = new SerializeConfig();
config.put(java.util.Date.class, new FastJsonDateFormatSerializer());
config.put(java.sql.Date.class, new FastJsonDateFormatSerializer());
config.put(java.sql.Timestamp.class, new FastJsonDateFormatSerializer());
return com.alibaba.fastjson.JSON.toJSONString(object, config, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue);
}
/**
* 统一JSON转换格式(FastJson)
* @param object
* @return
*/
public static com.alibaba.fastjson.JSONObject toFastJsonObject(Object object, boolean writeNullValue) {
SerializeConfig config = new SerializeConfig();
config.put(java.util.Date.class, new FastJsonDateFormatSerializer());
config.put(java.sql.Date.class, new FastJsonDateFormatSerializer());
config.put(java.sql.Timestamp.class, new FastJsonDateFormatSerializer());
return (com.alibaba.fastjson.JSONObject)com.alibaba.fastjson.JSON.toJSON(object, config);
}
/**
* JSON转对象
* @param str
* @param clazz
* @return
*/
public static <T> T fastJsonStringToEntity(String str, Class<T> clazz) {
T object = com.alibaba.fastjson.JSON.parseObject(str, clazz);
return object;
}
/**
* JSON转list
* @param str
* @param clazz
* @return
*/
public static <T> List<T> fastJson2EntityList(String str, Class<T> clazz) {
try{
List<T> list = com.alibaba.fastjson.JSON.parseArray(str, clazz);
return list;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* list转JSON
* @param <T>
* @param str
* @param clazz
* @return
*/
public static <T> String fastList2Json(List<T> list) {
//list转换为json
try{
String str= com.alibaba.fastjson.JSON.toJSON(list).toString();
return str;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 转换Map
* @param jsonValue
* @return
*/
public static List<Map<String, Object>> fastJson2MapList(String jsonValue) {
List<Map<String, Object>> list = new LinkedList<Map<String, Object>>();
try{
com.alibaba.fastjson.JSONArray array = com.alibaba.fastjson.JSON.parseArray(jsonValue);
for(int i = 0; i < array.size(); i++) {
Map<String, Object> map = convert2MapObject(array.get(i).toString());
if(map != null) {
list.add(map);
}
}
}catch (Exception e) {
}
return list;
}
/**
* JSON转Map
* @param jsonValue
* @return
*/
public static Map<String, Object> convert2MapObject(String jsonValue) {
try{
Map<String, Object> map = JSON.parseObject(jsonValue, new TypeReference<HashMap<String, Object>>(){});
return map;
}catch (Exception e) {
}
return null;
}
}
api拆分(数据传递和接收的几种方式)的更多相关文章
- 【转载】C#批量插入数据到Sqlserver中的三种方式
引用:https://m.jb51.net/show/99543 这篇文章主要为大家详细介绍了C#批量插入数据到Sqlserver中的三种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本篇, ...
- C#中POST数据和接收的几种方式(抛砖引玉)
POST方式提交数据,一种众所周知的方式: html页面中使用form表单提交,接收方式,使用Request.Form[""]或Request.QueryString[" ...
- [转]C#中POST数据和接收的几种方式
POST方式提交数据,一种众所周知的方式: html页面中使用form表单提交,接收方式,使用Request.Form[""]或Request.QueryString[" ...
- C#中POST数据和接收的几种方式
POST方式提交数据,一种众所周知的方式: html页面中使用form表单提交,接收方式,使用Request.Form[""]或Request.QueryString[" ...
- android 应用程序Activity之间数据传递与共享的几种途径
一.基于消息的通信机制 Intent ---boudle ,extraAndroid为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信!组件间通信的核心机制是I ...
- Ajax上传数据和上传文件(三种方式)
Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) <!DOCTYPE html> <html la ...
- 【前台 ajax】web项目前台传递数组给后台 两种方式
项目使用maven springMVC 有需求 将前台的数组 在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true, ] 如果Post ...
- 传递引用类型参数的两种方式(转自 MSDN)
引用类型的变量不直接包含其数据:它包含的是对其数据的引用.当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值(更改属性的值),但是无法更改引用本身的值:也就是说,不能使用相同的引 ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
随机推荐
- WP8.1StoreApp(WP8.1RT)---添加推送功能和获取系统信息
添加推送通知 1:Package.appxmanifest中的声明添加后台任务的推送通知权限 2:var channel = await PushNotificationChannelManager. ...
- XSS结合JSONP获取网站访客社交账号信息
我在本地环境搭建了一个WordPress网站,并在该网站中植入JavaScript文件.如果访客在浏览网站时登录了百度账号,该js文件能够利用JSONP获取网站访客的百度账号信息. 具体情况如下: 1 ...
- 表格Table宽度设置无效的解决方法
表格Table宽度设置无效的解决方法 bootstrap中使用table时发现不管用width赋值方式都无法改变table>td的宽度 解决方法: 设置table:table-layout:fi ...
- SpringMvc HttpMessageConverter之@ResponseBody
我们先看HttpMessageConverter的示意图,从图片可以看出它是多么的重要.在一条必经之路截道了的感觉. 先上我的测试例子: jsp页面: <%@ page language=&qu ...
- Tsung安装指南
1. 所需要软件包unixODBC-2.2.14.tar.gzotp_src_R13B02-1.tar.gztsung-1.3.1.tar.gzTemplate-Toolkit-2.22.tar.gz ...
- day00 -----博客作业1
问题1.使用while循环输入 1 2 3 4 5 6 8 9 10 i = 0 while i<10: i+=1 if i ==7: continue print(i) 问题2 求1- ...
- SpringCloud学习笔记(一)——基础
什么是微服务架构 简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进 ...
- mysql5.7.20多实例编译安装
好记性不如烂笔头! MySQL多实例 实际上就是在同一台服务器上运行多个mysql服务进程. 相同点:公用同一套MySQL安装程序. 不同点:使用不同的配置文件(也可以相同).启动程序(也可以相同). ...
- Python【每日一问】16
问: [基础题]TCP/UDP/HTTP协议区别 [提高题]在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...
- Smarty <= 3.1.32 Remote Code execution(CVE-2017-1000480)
Smarty介绍 smarty是一个php模板引擎,其项目地址:https://github.com/smarty-php/smarty 测试环境搭建 下载:https://github.co ...