api拆分(数据传递和接收的几种方式)
Posted 陌上花开
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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拆分(数据传递和接收的几种方式)的主要内容,如果未能解决你的问题,请参考以下文章