2021SC@SDUSC
JSONRequest是APIJSON发送请求的方法
model中的JSONRequest继承了APIJSON中的JSONRequest
public class JSONRequest extends apijson.JSONRequest {}
private static final long serialVersionUID = 1L;
public JSONRequest() {
super();
}
/**
* encode = true
* {@link #JSONRequest(String, Object)}
* @param object
*/
public JSONRequest(Object object) {
super(object);
}
/**
* @param name
* @param object
*/
public JSONRequest(String name, Object object) {
super(name, object);
}
super()调用了父类apijson.JSONRequest的JSONRequest()如下
public class JSONRequest extends JSONObject {
private static final long serialVersionUID = 1L;
public JSONRequest() {
super();
}
/**
* @param object must be annotated by {@link MethodAccess}
* @see {@link #JSONRequest(String, Object)}
*/
public JSONRequest(Object object) {
this(null, object);
}
/**
* @param name
* @param object
* @see {@link #puts(String, Object)}
*/
public JSONRequest(String name, Object object) {
this();
puts(name, object);
}
}
这里是三种请求
public JSONRequest()
public JSONRequest(Object object)
public JSONRequest(String name, Object object)
public JSONRequest()直接调用父类方法
public JSONRequest(Object object)
根据内部构造得知,使用时调用了public JSONRequest(String name, Object object)
将String name设为空,然后puts(name, object)
实际上就是不传入参数时,调用super()
仅传入Object参数视为传入NULL,Object,与JSONRequest(String name, Object object)相同处理方法,首先调用super(),然后puts(name, object)
puts(name, object)方法在apijson.JSONObject中,内容如下
public Object put(String key, Object value) {
if (value == null) {
Log.e(TAG, "put value == null >> return null;");
return null;
}
if (StringUtil.isEmpty(key, true)) {
Class<?> clazz = value.getClass(); //should not return null
if (clazz.getAnnotation(MethodAccess.class) == null) {
throw new IllegalArgumentException("puts StringUtil.isEmpty(key, true)" +
" clazz.getAnnotation(MethodAccess.class) == null" +
" \n key为空时仅支持 类型被@MethodAccess注解 的value !!!" +
" \n 如果一定要这么用,请对 " + clazz.getName() + " 注解!" +
" \n 如果是类似 key[]:{} 结构的请求,建议用 putsAll(...) !");
}
key = value.getClass().getSimpleName();
}
return super.put(key, value);
}
在apijson.JSONObject中,没有关于JSONRequest的定义
而apijson.JSONObject extends com.alibaba.fastjson.JSONObject
所以JSONRequest的super()方法来自com.alibaba.fastjson.JSONObject
这一系列的思想是,类继承类
apijson.JSONObject取代com.alibaba.fastjson.JSONObject
apijson.JSONRequest以apijson.JSONObject为基础
最终在JSONRequest取代了apijson.JSONRequest
这个过程中方法不断完善
对于JSONObject的探讨,由我的同学进行分析
查看具体内容请移步至(35条消息) 代码分析八_鲲不鲲的博客-CSDN博客
下面是putsALL方法
@Override
public JSONRequest putsAll(Map<? extends String, ? extends Object> map) {
super.putsAll(map);
return this;
}
调用了父类apijson.JSONRequest的putsALL
@Override
public JSONObject putsAll(Map<? extends String, ? extends Object> map) {
super.putsAll(map);
return this;
}
调用了父类apijson.JSONObject的putsALL
public JSONObject putsAll(Map<? extends String, ? extends Object> map) {
putAll(map);
return this;
}
@Override
public void putAll(Map<? extends String, ? extends Object> map) {
if (map != null && map.isEmpty() == false) {
super.putAll(map);
}
}
最终调用了com.alibaba.fastjson.JSONObject的方法
/**
* @param value
* @return {@link #puts(String, Object)}
*/
@Override
public JSONRequest puts(Object value) {
return puts(null, value);
}
/**
* @param key
* @param value
* @return this
* @see {@link #put(String, Object)}
*/
@Override
public JSONRequest puts(String key, Object value) {
put(key, value);
return this;
}
/**
* @param value
* @return {@link #put(String, Object)}
*/
@Override
public Object put(Object value) {
return put(null, value);
}
/**自定义类型必须转为JSONObject或JSONArray,否则RequestParser解析不了
*/
@Override
public Object put(String key, Object value) {
if (value == null) {// || key == null
return null;
}
Object target = JSON.parse(value);
// if (target == null) { // "tag":"User" 报错
// return null;
// }
return super.put(StringUtil.isNotEmpty(key, true) ? key : value.getClass().getSimpleName() //must handle key here
, target == null ? value : target);
}
最后是put方法,如上文中提到
public Object put(String key, Object value) {
if (value == null) {
Log.e(TAG, "put value == null >> return null;");
return null;
}
if (StringUtil.isEmpty(key, true)) {
Class<?> clazz = value.getClass(); //should not return null
if (clazz.getAnnotation(MethodAccess.class) == null) {
throw new IllegalArgumentException("puts StringUtil.isEmpty(key, true)" +
" clazz.getAnnotation(MethodAccess.class) == null" +
" \n key为空时仅支持 类型被@MethodAccess注解 的value !!!" +
" \n 如果一定要这么用,请对 " + clazz.getName() + " 注解!" +
" \n 如果是类似 key[]:{} 结构的请求,建议用 putsAll(...) !");
}
key = value.getClass().getSimpleName();
}
return super.put(key, value);
}
最终return的是super.put(key, value)
com.alibaba.fastjson.JSONObject常用方法如下
json2JsonObject();//将Json字符串转换为JSONObject对象
json2JavaBean();//将Json字符串转换为JavaBean对象
json2JsonArray();//将Json字符串转换为JSONArray对象
json2JavaBeanList();//将Json字符串转换为JavaBean的集合
javaBean2Json();//将JavaBean转换为Json格式的数据
javaBean2JsonObject();//将JavaBean转换为JSONObject对象
json2ListInMap();//从Json字符串的Map中获取List对象
list2JsonInMap();//将含list的Map对象转换为Json字符串
stringToMap();//json字符串转map
mapToString();//map转json字符串
mapToJsonObject();//map转json对象
testList2String();//list转json字符串
原文地址(35条消息) com.alibaba.fastjson.JSONObject;的使用_mameng1988的博客-CSDN博客_com.alibaba.fastjson.jsonobject
总结:
APIJSON的JSONRequest主要功能就是调用方法JSONRequest()
在调用时可能传入参数JSONRequest(String name, Object object)
多进行了一步put处理,然后调用super方法