Maison > Java > javaDidacticiel > le corps du texte

Comment résoudre le problème du renommage et de l'ordre des champs d'objet @JSONField en Java

王林
Libérer: 2023-04-18 15:28:03
avant
1745 Les gens l'ont consulté

Objet Java en Json, renommage et commande du champ d'objet @JSONField

1 Présentation de la dépendance maven

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>
Copier après la connexion

2. Renommer le champ

1 Créez une entité de test

import lombok.Data; 
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
    private static final long serialVersionUID = 1582941630439552458L;
    private String businessLicenseCopy;
    private String businessLicenseNumber;
    private String merchantName;
    private String legalPerson;
    private String companyAddress;
    private String businessTime;
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Copier après la connexion

2. l'effet avant la conversion

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
Copier après la connexion
Copier après la connexion

{
"businessLicenseCopy":"1",
"businessLicenseNumber":"2",
"businessTime":"6",
"companyAddress":"5",
" legalPerson": "4",
"merchantName": "3"
}

3. Nous devons convertir en une clé soulignée, par exemple en convertissant businessLicenseCopy en business_license_copy

Nous devons modifier l'entité et ajouter l'annotation @JSONField

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
    private static final long serialVersionUID = 1582941630439552458L;
    @JSONField(name = "business_license_copy")
    private String businessLicenseCopy;
 
    @JSONField(name = "business_license_number")
    private String businessLicenseNumber;
 
    @JSONField(name = "merchant_name")
    private String merchantName;
 
    @JSONField(name = "legal_person")
    private String legalPerson;
 
    @JSONField(name = "company_address")
    private String companyAddress;
 
    @JSONField(name = "business_time")
    private String businessTime;
 
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Copier après la connexion

4. Ajoutez des annotations et imprimez le json

System.out.println(JSONObject.toJSONString(new LkWeChatBusinessLicenseInfo()));
Copier après la connexion
Copier après la connexion

{
"business_license_copy":"1",
"business_license_number":"2",
"business_time":"6",
"company_address": "5" ,
"legal_person":"4",
"merchant_name":"3"
}

3. Tri des champs

1. Le json que nous produisons et imprimons est comme ceci

{
"business_license_copy" :" 1",
"business_license_number": "2",
"business_time": "6",
"company_address": "5",
"legal_person": "4",
"merchant_name": "3"
}

Nous voulons réorganiser les clés dans un certain ordre

2. Ajoutez l'ordinal de tri à l'annotation @JSONField

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
 
/**
 * @类名 WeChatBusinessLicenseInfo
 * @描述 营业执照/登记证书信息(测试用)
 * @版本 1.0
 * @创建人 XuKang
 * @创建时间 2021/12/24 10:43
 **/
@Data
public class LkWeChatBusinessLicenseInfo implements Serializable {
 
    private static final long serialVersionUID = 1582941630439552458L;
 
    @JSONField(name = "business_license_copy",ordinal = 1)
    private String businessLicenseCopy;
 
    @JSONField(name = "business_license_number",ordinal = 2)
    private String businessLicenseNumber;
 
    @JSONField(name = "merchant_name",ordinal = 3)
    private String merchantName;
 
    @JSONField(name = "legal_person",ordinal = 4)
    private String legalPerson;
 
    @JSONField(name = "company_address",ordinal = 5)
    private String companyAddress;
 
    @JSONField(name = "business_time",ordinal = 6)
    private String businessTime;
 
    public LkWeChatBusinessLicenseInfo(){
        this.businessLicenseCopy = "1";
        this.businessLicenseNumber = "2";
        this.merchantName = "3";
        this.legalPerson = "4";
        this.companyAddress = "5";
        this.businessTime = "6";
    }
}
Copier après la connexion

3. Sortie et imprimez les entités converties :

System.out.println(JSONObject.toJSONString( new LkWeChatBusinessLicenseInfo()));
{
"business_license_copy":"1",
"business_license_number":"2",
"merchant_name":"3",
"legal_person":"4",
"company_address": "5",
"business_time":"6"
}

Résumé : En plus de @JSONField, il existe également @JsonProperty et @SerializedName qui est principalement utilisé pour la conversion des paramètres d'entrée et la sérialisation des chaînes Json ; Objets Java ; @SerializedName modifie les valeurs des champs​​de sérialisation et de désérialisation par défaut ;

Scénarios d'utilisation courants de l'annotation @JSONField

Scénarios d'application :

Lorsque nous interagissons avec le front-end, le front- end veut Le nom du champ requis est différent du nom du champ que nous fournissons.Une solution pour le moment consiste à modifier la classe d'entité. Cependant, si la classe d'entité est utilisée plus souvent, le coût de sa modification sera trop élevé. , vous pouvez utiliser l'annotation @JSONField pour réaliser le remplacement. L'effet et l'utilisation sont les suivants :

@JSONField(name = "size_new")
private int size;
Copier après la connexion

1. Contenu JSON et classe d'entité, méthode d'écriture régulière de @JSONField

JSON (cohérent avec le contenu de la chaîne JSON suivante)

{
    size: 5,
    weight: 10,
    colour: "red"
}
Copier après la connexion

Classe d'entité (AppleDO.java)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
public class AppleDO {
    @JSONField(name = "size_new")
    private int size;
    @JSONField(name = "weight_new")
    private int weight;
    @JSONField(name = "colour_new")
    private String colour;
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
    public String getColour() {
        return colour;
    }
    public void setColour(String colour) {
        this.colour = colour;
    }
}
Copier après la connexion

2. La conversion de chaîne de caractères JSON correspond à l'objet Java

Code d'exécution

public static void main(String[] args) {
    String json = "{\n" +
        "    size_new: 5,\n" +
        "    weight_new: 10,\n" +
        "    colour_new: \"red\",\n" +
        "}";
    AppleDO appleDO = JSON.parseObject(json, AppleDO.class);
    System.out.println(appleDO.getSize());
    System.out.println(appleDO.getWeight());
    System.out.println(appleDO.getColour());
}
Copier après la connexion

Résultat d'exécution

Comment résoudre le problème du renommage et de l'ordre des champs d'objet @JSONField en Java

3 Prise en charge de la sérialisation et de la désérialisation

Les valeurs par défaut. de sérialisation et de désérialisation dans le code source sont tous deux vrais, alors par défaut Ce champ peut être sérialisé et désérialisé comme suit :

boolean serialize() default true;
boolean deserialize() default true;
Copier après la connexion

Méthode d'utilisation (ce qui suit ne prend pas en charge la sérialisation, mais prend en charge la désérialisation)

@JSONField(name = "size_new", serialize = false, deserialize = true)
private int size;
Copier après la connexion

Lorsque certains des nos champs ont des valeurs nulles, nous souhaitons toujours utiliser ce champ Retour au front-end (cette configuration peut renvoyer une chaîne avec des champs vides, mais elle n'est pas valide lorsque le champ est un type de données de base et doit être converti en une classe wrapper)

@JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
Copier après la connexion

4. Spécifiez l'ordre des champs

Convertissez les objets Java au format JSON, l'ordre des champs convertis sera trié selon la première lettre. Vous pouvez également spécifier l'ordre des champs de la manière suivante :

@JSONField(name = "size_new", ordinal = 3)
private int size;
@JSONField(name = "weight_new", ordinal = 1)
private int weight;
@JSONField(name = "colour_new", ordinal = 2)
private String colour;
Copier après la connexion

Exécutez le code

.
AppleDO apple = new AppleDO();
apple.setSize(6);
apple.setWeight(12);
apple.setColour("green");
String appleStr = JSON.toJSONString(apple);
System.out.println(appleStr);
Copier après la connexion

Le résultat courant avant d'ajouter le paramètre ordinal


Comment résoudre le problème du renommage et de l'ordre des champs d'objet @JSONField en Java

Le résultat courant après l'ajout du paramètre ordinal

Comment résoudre le problème du renommage et de l'ordre des champs d'objet @JSONField en Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal