


Comment résoudre les problèmes de sérialisation et de désérialisation de Json dans SpringBoot
Contrôler la sérialisation/désérialisation json
1. L'utilisation de @JsonIgnoreProperties
@JsonIgnoreProperties(value = { "prop1","prop2" })
est utilisée pour modifier la classe Pojo et ignorer les attributs spécifiés lors de la sérialisation et de la désérialisation. Un ou plusieurs attributs peuvent être ignorés.
@JsonIgnoreProperties(ignoreUnknown = true)
Utilisé pour modifier le Pojo. classe, ignorant les propriétés qui ne peuvent pas être définies lors de la désérialisation, y compris les propriétés qui ne peuvent pas être définies dans le constructeur et qui n'ont pas de méthodes de définition correspondantes.
2 Annotation @JsonProperty
Si le nom du champ json est le même que celui de Pojo When. les noms de propriété sont incohérents, vous pouvez utiliser @JsonProperty pour annoter la méthode getter() ou setter(). Cette annotation définit le nom de propriété correspondant à json. De plus, @JsonProperty est souvent utilisé pour annoter les paramètres formels du constructeur. Dans ce cas, le constructeur L'annotation @JsonCreator doit être ajoutée.
3. Annotation @JsonCreator
Si la classe Pojo définit un constructeur avec des paramètres mais ne fournit pas de constructeur sans paramètre, une erreur sera signalée lors de la désérialisation. deux méthodes :
Méthode 1 : Ajouter un constructeur sans paramètre
Méthode 2 : Ajoutez l'annotation @JsonCreator à ce constructeur paramétré, et les paramètres doivent être annotés avec @JsonProperty.
4. Annotations avec @JsonGetter
Si le nom du champ json est incohérent avec le nom de la propriété du Pojo, vous pouvez utiliser @JsonGetter pour annoter le getter() et @JsonSetter pour annoter la méthode setter(). spécifiez un nom de propriété. Ces deux annotations peuvent être remplacées par @JsonProperty.
5 @JsonAnySetter annotation
Les noms de propriétés d'objet généraux sont déterminés, comme l'objet Car, qui a des attributs nommés tels que marque/prix. parfois, nous devons également définir certains attributs étendus. Les noms de ces attributs étendus ne sont pas encore déterminés. Map
public class Car { public String brand; private Map<String, String> properties; @JsonAnySetter public void add(String key, String value) { properties.put(key, value); } }
Une fois la classe ajoutée avec @JsonAnySetter, le json suivant les données peuvent être désérialisées dans Map :
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
6. L'annotation @JsonAnyGetter
correspond à l'annotation @JsonAnySetter Si vous souhaitez sérialiser les attributs Map K/V dans la classe en json, vous devez ajouter un @JsonAnyGetter. méthode à la classe, qui renvoie directement KV. Il suffit de mapper.
public class Car { public String brand; private Map<String, String> properties; @JsonAnyGetter public Map<String, String> getProperties() { return properties; } }
Le json sérialisé est :
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
7 Annotation @JsonFormat
Efface généralement le format d'heure utilisé pour la sérialisation des attributs Date/Heure.
public class Event { public String name; @JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; }
8. Annotations @JsonSerialize et @JsonDeserialize
@ L'annotation JsonSerialize peut définir une fonction de sérialisation spéciale pour les attributs de classe, et l'annotation @JsonDeserialize est utilisée pour personnaliser la fonction de désérialisation pour les attributs json
Règles de sérialisation SpringBoot
Include .Include.ALWAYS
L'attribut par défautInclude.Include.ALWAYS
默认Include.NON_DEFAULT
属性为默认值不序列化Include.NON_EMPTY
属性为 空(“”) 或者为 NULL 都不序列化Include.NON_NULL
Include.NON_DEFAULT
est la valeur par défaut et n'est pas sérialiséInclude.NON_EMPTY
L'attribut est vide ("") ou NULL et n'est pas sérialisé Include.NON_NULL
L'attribut est NULL et n'est pas sérialisé1 Paramètres globaux/** * 〈返回json空值去掉null和""〉 〈功能详细描述〉 * * @author gogym * @version 2017年10月13日 * @see JacksonConfig * @since */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 //objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); return objectMapper; } }
spring.jackson.default-property-inclusion=non_null spring: jackson: default-property-inclusion: non_null
@JsonInclude(Include.NON_NULL)
(1). Personnalisez une classe d'outil de sérialisation, qui doit implémenter StdSerializer
public class ClientObjectSerialize extends JsonSerializer<CreditBorrowerRepaymentRequestDto>{ @Override public void serialize(CreditBorrowerRepaymentRequestDto dto, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); try { Field[] fields = dto.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if(null == field.get(dto)){ continue; } jsonGenerator.writeFieldName(field.getName()); jsonGenerator.writeObject(field.get(dto)); } } catch (Exception e) { e.printStackTrace(); } jsonGenerator.writeEndObject(); } }
@JsonSerialize(using = ClientObjectSerialize.class) public class CreditBorrowerRepaymentRequestDto{ }
@JsonSerialize(using = ClientStringSerialize.class) private String name; @JsonSerialize(using = ClientDtaeSerialize.class) private Date date; public class ClientStringSerialize extends JsonSerializer<String> { @Override public void serialize(String string, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if(string == null){ jsonGenerator.writeString(string + "[NULL]"); }else{ jsonGenerator.writeString(string); } } } public class ClientDtaeSerialize extends JsonSerializer<Date> { @Override public void serialize(Date createDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createDate)); } }
SpringBoot renvoie. traitement de la valeur nulle dans les données Json et convertit le type de chaîne La valeur nulle est convertie en "", la valeur nulle du type de tableau de collection est convertie en [], la valeur nulle du type de données primitif est convertie en 0, la valeur nulle de type booléen est convertie sur false et la valeur nulle de l'objet entité est convertie en {}.
(1)🎜Sérialiseur de valeur nulle personnalisé🎜🎜import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /** * 自定义null值序列化处理器 */ public class CustomizeNullJsonSerializer { /** * 处理数组集合类型的null值 */ public static class NullArrayJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); jsonGenerator.writeEndArray(); } } /** * 处理字符串类型的null值 */ public static class NullStringJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(""); } } /** * 处理数值类型的null值 */ public static class NullNumberJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(0); } } /** * 处理boolean类型的null值 */ public static class NullBooleanJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeBoolean(false); } } /** * 处理实体对象类型的null值 */ public static class NullObjectJsonSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartObject(); jsonGenerator.writeEndObject(); } } }
import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import java.util.Collection; import java.util.List; /** * <pre class="brush:php;toolbar:false"> * 此modifier主要做的事情为: * 1.当序列化类型为数组集合时,当值为null时,序列化成[] * 2.String类型值序列化为"" * **/ public class MyBeanSerializerModifier extends BeanSerializerModifier { @Override public List
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; /** * 配置Jackson实体 */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); /** 为objectMapper注册一个带有SerializerModifier的Factory */ objectMapper.setSerializerFactory(objectMapper.getSerializerFactory() .withSerializerModifier(new MyBeanSerializerModifier())); SerializerProvider serializerProvider = objectMapper.getSerializerProvider(); serializerProvider.setNullValueSerializer(new CustomizeNullJsonSerializer .NullObjectJsonSerializer()); return objectMapper; } }
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





La combinaison de golangWebSocket et JSON : réaliser la transmission et l'analyse des données Dans le développement Web moderne, la transmission de données en temps réel devient de plus en plus importante. WebSocket est un protocole utilisé pour établir une communication bidirectionnelle. Contrairement au modèle de requête-réponse HTTP traditionnel, WebSocket permet au serveur de transmettre activement des données au client. JSON (JavaScriptObjectNotation) est un format léger d'échange de données, concis et facile à lire.

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

MySQL5.7 et MySQL8.0 sont deux versions différentes de la base de données MySQL. Il existe quelques différences principales entre elles : Améliorations des performances : MySQL8.0 présente quelques améliorations de performances par rapport à MySQL5.7. Ceux-ci incluent de meilleurs optimiseurs de requêtes, une génération de plans d'exécution de requêtes plus efficaces, de meilleurs algorithmes d'indexation et des requêtes parallèles, etc. Ces améliorations peuvent améliorer les performances des requêtes et les performances globales du système. Prise en charge JSON : MySQL 8.0 introduit la prise en charge native du type de données JSON, y compris le stockage, la requête et l'indexation des données JSON. Cela rend le traitement et la manipulation des données JSON dans MySQL plus pratiques et efficaces. Fonctionnalités de transaction : MySQL8.0 introduit de nouvelles fonctionnalités de transaction, telles que l'atome

Les méthodes d'optimisation des performances pour la conversion des tableaux PHP en JSON incluent : l'utilisation d'extensions JSON et de la fonction json_encode() ; l'ajout de l'option JSON_UNESCAPED_UNICODE pour éviter l'échappement de caractères ; l'utilisation de tampons pour améliorer les performances d'encodage de boucle et l'utilisation d'un tiers ; Bibliothèque d'encodage JSON.

Utilisez la fonction json.MarshalIndent dans Golang pour convertir la structure en une chaîne JSON formatée. Lors de l'écriture de programmes dans Golang, nous avons souvent besoin de convertir la structure en chaîne JSON. Dans ce processus, la fonction json.MarshalIndent peut nous aider à implémenter. sortie formatée. Ci-dessous, nous expliquerons en détail comment utiliser cette fonction et fournirons des exemples de code spécifiques. Commençons par créer une structure contenant des données. Ce qui suit est une indication

Démarrage rapide : méthode Pandas de lecture des fichiers JSON, des exemples de code spécifiques sont requis Introduction : Dans le domaine de l'analyse des données et de la science des données, Pandas est l'une des bibliothèques Python importantes. Il fournit des fonctions riches et des structures de données flexibles, et peut facilement traiter et analyser diverses données. Dans les applications pratiques, nous rencontrons souvent des situations où nous devons lire des fichiers JSON. Cet article expliquera comment utiliser Pandas pour lire des fichiers JSON et joindra des exemples de code spécifiques. 1. Installation de Pandas

Les annotations dans la bibliothèque Jackson contrôlent la sérialisation et la désérialisation JSON : Sérialisation : @JsonIgnore : Ignorer la propriété @JsonProperty : Spécifiez le nom @JsonGetter : Utilisez la méthode get @JsonSetter : Utilisez la méthode set Désérialisation : @JsonIgnoreProperties : Ignorez la propriété @ JsonProperty : Spécifiez le nom @JsonCreator : utilisez le constructeur @JsonDeserialize : logique personnalisée

L'utilisation de la fonction json_encode() de PHP pour convertir un tableau ou un objet en chaîne JSON et formater la sortie peut faciliter le transfert et l'échange de données entre différentes plates-formes et langages. Cet article présentera l'utilisation de base de la fonction json_encode() et comment formater et générer une chaîne JSON. 1. Utilisation de base de la fonction json_encode() La syntaxe de base de la fonction json_encode() est la suivante : stringjson_encod
