Explicación detallada de FastJson de SpringMVC

Tabla de contenido

Uno: regresión del formato de datos JSON

 1. ¿Qué es JSON?

2. Formato de matriz Json

 3. Formato de objeto Json

4. Formato anidado de objeto de matriz

Dos: Introducción a FastJson

Tres: API de serialización FastJson

Cuatro: API de deserialización de FashJson

Cinco: SerializerFeature enumeración

Seis: anotación @JSonField

Siete: @ anotación JSonType

Ocho: SpringMVC integra FastJson


Uno: regresión del formato de datos JSON

 1. ¿Qué es JSON?

               JSON: (Notación de objetos JavaScript, Notación de objetos JS) es un formato ligero de intercambio de datos. Se basa en un subconjunto de ECMAScript (la especificación js desarrollada por la Asociación Europea de Informática) y utiliza un formato de texto que es completamente independiente del lenguaje de programación para almacenar y representar datos. La simplicidad y la clara jerarquía hacen de JSON un lenguaje de intercambio de datos ideal. Es fácil de leer y escribir para las personas, y también es fácil de analizar y generar para las máquinas, y puede mejorar efectivamente la eficiencia de la transmisión de la red. Actualmente, JSON es el rey de los lenguajes de intercambio de datos.

2. Formato de matriz Json

  Los datos de Json en sí son una matriz, rodeada por corchetes, y los elementos de la matriz están separados por comas. No hay restricción en el tipo de datos de los elementos de la matriz.

var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式json
console.log(jsonArray[0]); //访问json数组的元素
for(var i = 0 ; i < jsonArray.length ; i++){
    console.log(jsonArray[i]); //遍历数组,访问每个元素
}

 3. Formato de objeto Json

              Los datos de Json en sí son un objeto, entre llaves. El objeto se almacena en forma de pares clave-valor, la clave se fija como un tipo de cadena y el valor es cualquier tipo de datos. La clave y el valor están separados por un colon

var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式json
console.log(jsonObject.k1); //取出键k1对应的值

4. Formato anidado de objeto de matriz

 ①: Los elementos de la matriz son objetos

var jsonArray = [
    {"k1":"v1"},{"k2":"v2"}
]; // 定义数组格式json,数组元素是对象
console.log(jsonArray[0].k1); //访问数组0索引的元素,该元素的键k1对应的值

②: El valor en el objeto es una matriz

var jsonObject = {
    "k1":["元素1","元素2"],
    "k2":["元素1","元素2"]
}; // 定义对象格式json,键是字符串类型,值是数组
console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素

③: Estoy yo en ti, y tú en mí

var json = {
    "k1":[
      "元素1",{"key1":"value1"},{"key2":"value2"}  
    ],
    "k2":[
        {"key1":"value1"}
    ]
}; //定义对象格式json,键是字符串,值是数组,数组的元素是对象
console.log(json.k1[1].key1); //访问json对象的键k1,对应的是数组,访问数组的1索引,数组的1索引上的元素是对象,访问key1键对应的值

Dos: Introducción a FastJson

             FastJson es la biblioteca de análisis JSON de código abierto de Alibaba, que puede analizar cadenas con formato JSON, admite la serialización de Java Beans en cadenas JSON y deserializa de cadenas JSON a JavaBean.

Ventajas de Fastjson

  • En comparación con otras bibliotecas JSON, fastjson es rápido. Desde el lanzamiento de la versión 1.1.x de fastjson en 2011, su rendimiento nunca ha sido superado por otras bibliotecas JSON implementadas en Java .

  • Fastjson ampliamente utilizado se usa a gran escala en Alibaba y se implementa en decenas de miles de servidores Fastjson es ampliamente aceptado en la industria. En 2012, Open Source China lo seleccionó como uno de los software de código abierto nacionales más populares.

  • La prueba completa fastjson tiene muchos casos de prueba, en la versión 1.2.11, hay más de 3321 casos de prueba. Se realizan pruebas de regresión para cada versión para garantizar una calidad estable.

  • La API que usa fastjson simple es muy concisa.

  • Con todas las funciones, admite genéricos, admite procesamiento de flujo de textos grandes, admite enumeración y admite extensiones de serialización y deserialización.

Tres: API de serialización FastJson

Serialización: se refiere al proceso de convertir objetos Java en cadenas de formato json.Los objetos JavaBean, los objetos de colección de listas y las colecciones de mapas son los más utilizados.

  • JSON.aJSONString

    • Serializar objetos Java

public void objectToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("[email protected]");
    String jsonString = JSON.toJSONString(student);
    System.out.println(jsonString);
}

JSON.aJSONString

  • Serializar la colección List

public void listToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("[email protected]");

    Student student2 = new Student();
    student2.setId(2);
    student2.setName("张三2");
    student2.setAge(22);
    student2.setAddress("北京市2");
    student2.setEmail("[email protected]");

    List<Student> list = new ArrayList<Student>();
    list.add(student);
    list.add(student2);
    String jsonString = JSON.toJSONString(list);
    System.out.println(jsonString);
}

JSON.aJSONString

  • Serializar la colección de mapas

public void mapToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("[email protected]");

    Student student2 = new Student();
    student2.setId(2);
    student2.setName("张三2");
    student2.setAge(22);
    student2.setAddress("北京市2");
    student2.setEmail("[email protected]");
    Map<String,Student> map = new HashMap<String, Student>();
    map.put("s1",student);
    map.put("s2",student2);
    String jsonString = JSON.toJSONString(map);
    System.out.println(jsonString);
}

Cuatro: API de deserialización de FashJson

JSON.parseObject

  • Deserializar objetos Java

public void jsonToObject(){
    String jsonString = "{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"}";
    Student student = JSON.parseObject(jsonString, Student.class);
    System.out.println(student);
}

JSON.parseArray

  • Deserializar la colección List

public void jsonToList(){
    String jsonString = "[{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"},{\"address\":\"北京市2\",\"age\":22,\"email\":\"[email protected]\",\"id\":2,\"name\":\"张三2\"}]";
    List<Student> list = JSON.parseArray(jsonString,Student.class);
    for (int i = 0; i < list.size(); i++) {
        Student student =  list.get(i);
        System.out.println(student);
    }
}

JSON.parseObject

  • Deserializar la colección de mapas

public void jsonToMap(){
    String jsonString = "{\"s1\":{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"},\"s2\":{\"address\":\"北京市2\",\"age\":22,\"email\":\"[email protected]\",\"id\":2,\"name\":\"张三2\"}}";
    Map<String,Student> parse = JSON.parseObject(jsonString,new TypeReference<Map<String,Student>>(){});

    for(String s : parse.keySet()){
    	System.out.println(s + ":::"+parse.get(s));
    }
}

Cinco: SerializerFeature enumeración

Esta enumeración admite algunas definiciones de datos característicos para la serialización.

  • La constante de enumeración WriteMapNullValue se serializa como un campo nulo

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    student.setAge(20);
    //student.setAddress("北京市");
    student.setEmail("[email protected]");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
    System.out.println(jsonString);
}

El campo WriteNullStringAsEmpty de la constante de enumeración es nulo, serializado como ""

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    student.setAge(20);
    //student.setAddress("北京市");
    student.setEmail("[email protected]");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
    System.out.println(jsonString);
}

El campo WriteNullNumberAsZero de la constante de enumeración es nulo, serializado como 0

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("张三");
    //student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("[email protected]");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
    System.out.println(jsonString);
}
  • El valor del campo de la constante de enumeración WriteNullBooleanAsFalse es nulo y la salida es falsa

  • Constante de enumeración WriteDateUseDateFormat formato de fecha con formato

  • Salida con formato PrettyFormat constante de enumeración

public void testSerializerFeature2(){
    Person person = new Person();
    //person.setFlag(true);
    person.setDate(new Date());
    String jsonString = JSON.toJSONString(person,SerializerFeature.WriteNullBooleanAsFalse,
  SerializerFeature.WriteDateUseDateFormat,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}

Seis: anotación @JSonField

Esta anotación actúa sobre métodos, campos y parámetros. Puede personalizarse para características y funciones durante la serialización y deserialización.

  • Atributo de anotación: nombre El nombre después de la serialización

  • Atributo de anotación: orden serializado ordinal

  • Atributo de anotación: formato de formato después de la serialización

  • Atributo de anotación: si serializar serializa el campo

  • Atributo de anotación: deserializar Si deserializar el campo

  • Atributo de anotación: serialzeFeatures Definición de características durante la serialización

Siete: @ anotación JSonType

Esta anotación actúa sobre la clase para personalizar la función de característica al serializar y deserializar los campos de la clase.

  • Atributo de anotación: incluye campos a serializar.

  • Atributo de anotación: pedidos El pedido después de la serialización.

  • Atributo de anotación: serialzeFeatures Definición de característica al serializar.

Ocho: SpringMVC integra FastJson

En el marco SpringMVC, la herramienta de serialización json predeterminada es jackson. Necesitamos configurar el convertidor de mensajes en el archivo de configuración SpringMVM y cambiar de jackson a FastJson.

  • Construcción del entorno

    • Crear un proyecto web

    • Importar paquetes jar dependientes relacionados

	<!-- FastJson -->
   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>
    <!-- 数据库驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.46</version>
    </dependency>
    <!-- spring框架 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
	<!--  springMVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <!--  spring jdbctemplate -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>

	<!-- 德鲁伊连接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
    </dependency>
  </dependencies>

Configurar springmvc.xml

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="false">
        <!-- FastJson的消息转换器-->
        <bean id = "fastJson" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
            <!-- FastJsonHttpMessageConverter类属性赋值-->
            <property name="supportedMediaTypes">
                <list>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

Supongo que te gusta

Origin blog.csdn.net/qq_61313896/article/details/128881318
Recomendado
Clasificación