目录

​​​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存入数据库

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐