alibaba关于JSON的各种骚操作

抛出问题:controller接收复杂数据类型非常的不友好

  1. 初学者(我)只能造一个model实体类进行接收。
  2. 接基本类型数组非常麻烦,只能麻烦前端爸爸或者自己用逗号拼接字符串,再用split(",")切成数组
  3. 数据对象就别想了

注解解释 

@RequestBody:

  • 百度说法 @RequestBody的作用其实是将json格式的数据转为java对象
  • 个人认为 你想用json格式传递参数就得打注解啊,就像你要买猪肉就得买盖戳的,不盖戳的你接不到值也不敢买啊(话说今年猪肉是真的贵) 

@ResponseBody:

  • 百度说法 @ResponseBody的作用其实是将java对象转为json格式的数据
  • 个人认为 好叭 我认为他这两句说的没什么卵用 接口项目必用@ResponseBody,没什么好说的。
  • tips:@Controller+@ResponseBody = @RestController

对于 Header: Content-Type application/json 的复杂结构一律用 @RequestBody JSONObject json 接收
希望有人别跟我杠 @RequestBody User user 这种 这里讨论是复杂数据类型,这种拿form-data可以解决的基本类型勿扰
下面进入正题:

正题

哎哎哎,正题在这呢,谁要入我啊,入入入。嗯~哼!(大家懂的)

对象 用JSONObject 

  • 基本常用的就是字符串和数字如下
String aaa =  json.getString("aaa");
		 Integer aaa1 =  json.getInteger("aaa1"); //包装类可以接null
		 int aaa2 = json.getIntValue("aaa2");    //基本类型可以接初始化值
  • 但是重点是可以获取对象里边的对象或者数组,就非常的方便
JSONObject a4 =  json.getJSONObject("aaa4");
JSONArray a3 =  json.getJSONArray("aaa3");

数组用 JSONArray 

  • JSONArray基本上就跟集合没什么区别,重点介绍
Object number = a3.get(0); //基本类型 [1,2,3,4]
JSONObject job =  a3.getJSONObject(0);//集合对象[{name:XXX,age:YYY},{},{}]

我自己常用的转换 (这类转换网上有许多,这里就不一一详解了)

  • 字符串转JSONObject
String str1 = response1.body().string(); 
JSONObject userJson =JSONObject.parseObject(str1);
  • JSONObject 转实体类
Jurisdiction jurisdiction = JSON.toJavaObject(userJson,Jurisdiction.class);
  • JSONObject 强转Map
//测试1
@RequestMapping(value="Test1")
public Map<String, Object> Test1(@RequestBody JSONObject json) {
	Map<String, Object> map = json;
	return map;
}
  • JSONArray 转 List<对象>

List<XXX> result = JSONObject.parseArray(jsonArray.toJSONString(), XXX.class);

如有不足之处,希望您不吝赐教,欢迎大家补充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章