Explication détaillée de FastJson de SpringMVC

Table des matières

Un : régression du format de données JSON

 1. Qu'est-ce que JSON ?

2. Format de tableau Json

 3. Format d'objet Json

4. Format imbriqué de l'objet tableau

Deux : Introduction à FastJson

Trois : API de sérialisation FastJson

Quatre : API de désérialisation FashJson

Cinq : énumération SerializerFeature

Six : annotation @JSonField

Sept : annotation @ JSonType

Huit : SpringMVC intègre FastJson


Un : régression du format de données JSON

 1. Qu'est-ce que JSON ?

               JSON : (JavaScript Object Notation, JS Object Notation) est un format d'échange de données léger. Il est basé sur un sous-ensemble d'ECMAScript (la spécification js développée par l'European Computer Association) et utilise un format de texte totalement indépendant du langage de programmation pour stocker et représenter les données. La simplicité et la clarté de la hiérarchie font de JSON un langage d'échange de données idéal. Il est facile à lire et à écrire pour les gens, et il est également facile pour les machines à analyser et à générer, et il peut améliorer efficacement l'efficacité de la transmission du réseau. Actuellement, JSON est le roi des langages d'échange de données.

2. Format de tableau Json

  Les données de Json elles-mêmes sont un tableau, entouré de crochets, et les éléments du tableau sont séparés par des virgules. Il n'y a aucune restriction sur le type de données des éléments du tableau.

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

 3. Format d'objet Json

              Les données de Json elles-mêmes sont un objet, entouré d'accolades. L'objet est stocké sous la forme de paires clé-valeur, la clé est fixée en tant que type de chaîne et la valeur est n'importe quel type de données. La clé et la valeur sont séparées par un côlon.

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

4. Format imbriqué de l'objet tableau

 ① : Les éléments du tableau sont des objets

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

② : La valeur dans l'objet est un tableau

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

③ : Il y a moi en toi et toi en moi

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

Deux : Introduction à FastJson

             FastJson est la bibliothèque d'analyse JSON open source d'Alibaba, qui peut analyser des chaînes au format JSON, prendre en charge la sérialisation de Java Beans en chaînes JSON et désérialiser des chaînes JSON en JavaBean.

Avantages de Fastjson

  • Comparé à d'autres bibliothèques JSON, fastjson est rapide.Depuis la sortie de fastjson version 1.1.x en 2011, ses performances n'ont jamais été surpassées par d'autres bibliothèques JSON implémentées en Java .

  • Fastjson largement utilisé est utilisé à grande échelle dans Alibaba et déployé sur des dizaines de milliers de serveurs Fastjson est largement accepté dans l'industrie. En 2012, il a été sélectionné comme l'un des logiciels open source nationaux les plus populaires par Open Source China.

  • Test complet fastjson a beaucoup de cas de test, dans la version 1.2.11, il y a plus de 3321 cas de test. Des tests de régression sont effectués pour chaque version afin de garantir une qualité stable.

  • L'API utilisant fastjson simple est très concise.

  • La fonctionnalité complète prend en charge les génériques, prend en charge le traitement de flux de textes volumineux, prend en charge l'énumération et prend en charge les extensions de sérialisation et de désérialisation.

Trois : API de sérialisation FastJson

Sérialisation : fait référence au processus de conversion d'objets Java en chaînes au format json. Les objets JavaBean, les objets de collection List et les collections Map sont les plus largement utilisés.

  • JSON.toJSONStringJSON.toJSONString

    • Sérialiser les objets 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.toJSONStringJSON.toJSONString

  • Sérialiser la collection 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.toJSONStringJSON.toJSONString

  • Sérialiser la collection Map

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);
}

Quatre : API de désérialisation FashJson

JSON.parseObject

  • Désérialiser les objets 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

  • Désérialiser la collection 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

  • Désérialiser la collection Map

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));
    }
}

Cinq : énumération SerializerFeature

Cette énumération prend en charge certaines définitions de données caractéristiques pour la sérialisation.

  • La constante d'énumération WriteMapNullValue est sérialisée en tant que champ nul

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);
}

Le champ WriteNullStringAsEmpty de la constante d'énumération est nul, sérialisé sous la forme ""

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);
}

Le champ de la constante d'énumération WriteNullNumberAsZero est nul, sérialisé en tant que 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);
}
  • La valeur du champ Constante d'énumération WriteNullBooleanAsFalse est nulle et la sortie est fausse

  • Format de date formaté de la constante d'énumération WriteDateUseDateFormat

  • Constante d'énumération Sortie au format PrettyFormat

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);
}

Six : annotation @JSonField

Cette annotation agit sur les méthodes, les champs et les paramètres. Elle peut être personnalisée pour les caractéristiques et les fonctions lors de la sérialisation et de la désérialisation.

  • Attribut d'annotation : name Le nom après la sérialisation

  • Attribut d'annotation : ordre sérialisé ordinal

  • Attribut d'annotation : format format après sérialisation

  • Attribut d'annotation : si serialize sérialise le champ

  • Attribut d'annotation : deserialize Indique s'il faut désérialiser le champ

  • Attribut d'annotation : serialzeFeatures Définition de la fonctionnalité lors de la sérialisation

Sept : annotation @ JSonType

Cette annotation agit sur la classe pour personnaliser la fonction de fonctionnalité lors de la sérialisation et de la désérialisation des champs de la classe.

  • Attribut d'annotation : inclut les champs à sérialiser.

  • Attribut d'annotation : commandes La commande après sérialisation.

  • Attribut d'annotation : serialzeFeatures Définition de la fonctionnalité lors de la sérialisation.

Huit : SpringMVC intègre FastJson

Dans le framework SpringMVC, l'outil de sérialisation json par défaut est jackson.Nous devons configurer le convertisseur de message dans le fichier de configuration SpringMVM et passer de jackson à FastJson.

  • Construction de l'environnement

    • Créer un projet Web

    • Importer les packages jar dépendants associés

	<!-- 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>

Configurer 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>

Je suppose que tu aimes

Origine blog.csdn.net/qq_61313896/article/details/128881318
conseillé
Classement