APIJSON 博客12 JSONRequest 第十二篇

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常用方法如下

  1. json2JsonObject();//将Json字符串转换为JSONObject对象

  2. json2JavaBean();//将Json字符串转换为JavaBean对象

  3. json2JsonArray();//将Json字符串转换为JSONArray对象

  4. json2JavaBeanList();//将Json字符串转换为JavaBean的集合

  5. javaBean2Json();//将JavaBean转换为Json格式的数据

  6. javaBean2JsonObject();//将JavaBean转换为JSONObject对象

  7. json2ListInMap();//从Json字符串的Map中获取List对象

  8. list2JsonInMap();//将含list的Map对象转换为Json字符串

  9. stringToMap();//json字符串转map

  10. mapToString();//map转json字符串

  11. mapToJsonObject();//map转json对象

  12. testList2String();//list转json字符串

原文地址(35条消息) com.alibaba.fastjson.JSONObject;的使用_mameng1988的博客-CSDN博客_com.alibaba.fastjson.jsonobject

总结:

APIJSON的JSONRequest主要功能就是调用方法JSONRequest()

在调用时可能传入参数JSONRequest(String name, Object object)

多进行了一步put处理,然后调用super方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值