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中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
随机推荐
- 知识记录——CSS规范(文章内容为转载)
原作者信息 作者:词晖 链接:http://www.zhihu.com/question/19586885/answer/48933504 来源:知乎 著作权归原作者所有,转载请联系原作者获得授权. ...
- Dapper.Contrib.Extensions问题
Dapper.Contrib.Extensions问题 Dapper.Extension.1.0.0.1\lib\net45\Dapper.Extension.dll Dapper.Contrib.1 ...
- JavaWeb -jsp文件和内置对象的解析
jsp文件和内置对象的解析 对page解析 JSP九大内置对象(自带,无需new) 1 out:输出对象 2 request:请求对象,存储“客户端像服务端发送的请求信息” 3 response:响应 ...
- samba服务器的安装与配置(之前是因为没有把共享文件权限放开!)(windows7和centOS6)
注:centOS6跟centOS7安装方法不一样哦.以下是centOS6的安装过程. 安装:yum -y install samba 启动:/etc/init.d/smb start 设置开机启动:c ...
- 爬虫6:pyquery库
强大又灵活的网页解析库,如果觉得正则写起来太麻烦,BeautifulSoup语法太难记,而你又熟悉jQuery的语法,那么用PyQuery就是最佳选择 一. 初始化 1. 字符串初始化 h ...
- x == (x = y) 不等于 (x = y) == x ?
简评:不瞒你说,我现在数数都是从 0 开始数的,整数是 1024. 有这么一个 Java 程序: class Quirky { public static void main(String[] arg ...
- (转)Javascript模块化编程(三):Require.js的用法
转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...
- 在 iOS 中使用 iconfont
如何使用自定义字体 在讲icon font之前,首先先来看看普通自定义字体是如何在ios中使用的,两个原理是一样的.这里以KaushanScript-Regular为例: Step 1: 导入字体 ...
- SDN定义网络
http://edu.51cto.com/course/course_id-4466.html http://edu.51cto.com/course/course_id-4497.html
- php 下载文件/直接下载数据内容
思路步骤 * 定义参数 * 魔术方法 * 执行下载 * 获取设置属性函数 * 获取设置文件mime 类型 * 获取设置下载文件名 * 设置header * 下载函数 实现代码 class DownFi ...