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拆分(数据传递和接收的几种方式)的主要内容,如果未能解决你的问题,请参考以下文章

前端ajax异步传值以及后端接收参数的几种方式

前台 JSON对象转换成字符串 相互转换 的几种方式

vue传值的几种方式

[转]C#中POST数据和接收的几种方式

java解析xml的几种方式哪种最好?

List的拆分的几种方式