目录
1.复杂类型JSON转java对象
1.1 实现原理解读
1.2 注意事项
2.java对象转JSON
2.1 java对象转JSON发送给前端
2.2 java对象向数据库存入JSON格式数据
前言
你是否遇到过这种情况,前端传来的数据内包含了数组或者嵌套了很多层数据,用传统的java数组却接收不了这些数据。
会抛出HttpMessageNotReadableException、MismatchedinputException这类异常,又或者接收了但是显示为null,或者不知道怎么将java对象存入数据库JSON字段中,那么这篇文章大概率可以解决你的问题。
1.1 实现原理解读
在我们使用@RequestBody注解修饰 方法中的形参后,SpringMVC框架就会帮我们把前端传来的JSON格式对象转换为JAVA对象,它的转换流程是这样的
1.从JSON数据中取出一个键(如下面这段JSON数据的“categoryToStringList”)
{"categoryToStringList":["{ 1397844263642378242}","{ 2297844263642378242}"]}
键:值(实际是是前端的一个集合)
2.将该字段首字母大写,前面加上set,组成setCategoryToStringList,利用反射原理到@RequestBody修饰的类中寻找没有叫setCategoryToStringList的方法
@PostMapping("/getCategoryS")
public void editDish(@RequestBody PictureListKit ids){
return;
}
3.如果有则调用该方法,将“ ["{ 1397844263642378242}","{ 2297844263642378242}"] ”中的每一项作为形参传入(字符串格式)
1.2 注意事项
- JSON数据中的键值对,值是集合的时候(上面那种情况),接收的数据类型需要为List,因为 List类型序列化后格式与JSON一致(这一特性下面可以用作,与数据库JSON格式数据互相转化,从而实现数据库存放集合的功能)
- 接收时最好使用自己定义的数据类型,原因上面说了是通过拼接方法名得到的,而java提供的标准类中不一定有这种方法。如果你的项目比较大的话,可以特别定义一个类用于接收前端传来的零零散散的各种数据,里面放上很多数据类型的变量,注意该类需要实现Serializable接口。
2.1 java对象转JSON
当你用了SpringMVC框架之后,其实很简单就把对象当成返回值返回就行了,一般情况下,项目中会写一个回复工具类,使用方法就是R.success(要返回的对象)
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
2.2 java对象向数据库存入JSON格式数据
上面提到过,因为List类型序列化后格式与JSON一致,所以可以直接将对象存到List接口集合内,然后通过Mybatis或MybatisPlus存入数据库