抛出问题:controller接收复杂数据类型非常的不友好
- 初学者(我)只能造一个model实体类进行接收。
- 接基本类型数组非常麻烦,只能麻烦前端爸爸或者自己用逗号拼接字符串,再用split(",")切成数组
- 数据对象就别想了
注解解释
@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);
如有不足之处,希望您不吝赐教,欢迎大家补充