--Translate entre l'énumération Java Enum et les valeurs dans JSON --Utilisez les classes abstraites JsonSerializer et JsonDeserializer fournies par Jackson
package com.example.humansex;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
* ISO 5218 (Code pour la notation du genre humain)Un type d'énumération qui représente.
*Code de genre:inconnue=0,Masculin=1,Femme=2,N'est pas applicable=9
*/
public enum HumanSex {
/**
*inconnue=0,Masculin=1,Femme=2,N'est pas applicable=9
*/
NOT_KNOWN(0), MALE(1), FEMALE(2), NOT_APPLICABLE(9);
private final int code;
private HumanSex(int code) {
this.code = code;
}
/**
*Renvoie le code de genre.
*/
public int getCode() {
return code;
}
/**
*Renvoie une constante d'énumération HumanSex qui correspond au code de genre.
*
* @code de paramètre Code de genre
* @retourne la constante d'énumération HumanSex
*/
public static HumanSex codeOf(int code) {
for (HumanSex value : HumanSex.values()) {
if (code == value.getCode()) {
return value;
}
}
return null; //Ne correspond pas
}
/**
*Une classe qui sérialise un objet HumanSex en JSON.
*/
public static class Serializer extends JsonSerializer<HumanSex> {
/**
*Code de genre pour l'objet HumanSex lors de la génération de JSON(Valeur entière)Convertir en.
*/
@Override
public void serialize(HumanSex value, JsonGenerator generator, SerializerProvider serializers) throws IOException {
generator.writeNumber(value.getCode());
}
}
/**
*Une classe qui désérialise un objet HumanSex de JSON.
*/
public static class Deserializer extends JsonDeserializer<HumanSex> {
/**
*Code de genre lors de l'analyse de JSON(Valeur entière)Vers un objet HumanSex.
*/
@Override
public HumanSex deserialize(JsonParser parser, DeserializationContext context) throws IOException {
return HumanSex.codeOf(parser.getIntValue());
}
}
}
package com.example;
import com.example.humansex.HumanSex;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.ArrayList;
import java.util.List;
public class MyData {
public List<Person> personList = new ArrayList<>();
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
for (Person person : personList) {
buf.append(person + System.lineSeparator());
}
return buf.toString();
}
public static class Person {
public String name;
//Spécifiez la classe à utiliser lors de la génération / analyse JSON par Jackson avec une annotation
@JsonSerialize(using = HumanSex.Serializer.class)
@JsonDeserialize(using = HumanSex.Deserializer.class)
public HumanSex sex;
public Person() {
}
public Person(String name, HumanSex sex) {
this.name = name;
this.sex = sex;
}
@Override
public String toString() {
return "name=[" + name + "], sex=[" + sex.toString() + "]";
}
}
}
package com.example;
import com.example.humansex.HumanSex;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.StringWriter;
public class App {
public static void main(String[] args) throws IOException {
//Générer un objet de données
MyData inputData = new MyData();
inputData.personList.add(new MyData.Person("Peko", HumanSex.NOT_KNOWN));
inputData.personList.add(new MyData.Person("Anubis", HumanSex.MALE));
inputData.personList.add(new MyData.Person("Isis", HumanSex.FEMALE));
inputData.personList.add(new MyData.Person("Robot", HumanSex.NOT_APPLICABLE));
//Générer une chaîne JSON à partir d'un objet de données dans Jackson
StringWriter out = new StringWriter();
new ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(out, inputData);
String json = out.toString();
//Chaîne JSON de sortie
System.out.println("***** Mydata → JSON *****");
System.out.println(json);
//Analyser la chaîne JSON dans Jackson et la convertir en objet de données
MyData outputData = new ObjectMapper().readValue(json, MyData.class);
//Représentation sous forme de chaîne de sortie de l'objet
System.out.println("***** JSON → Mydata *****");
System.out.println(outputData);
}
}
Préparez un fichier de configuration build.gradle pour la construction et l'exécution avec Gradle.
build.gradle
plugins {
id 'java'
id 'application'
}
group 'org.example'
version '0.0.1'
sourceCompatibility = 11
repositories {
mavenCentral()
}
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.3'
}
application {
mainClassName = 'com.example.App'
}
***** Mydata → JSON *****
{
"personList" : [ {
"name" : "Peko",
"sex" : 0
}, {
"name" : "Anubis",
"sex" : 1
}, {
"name" : "Isis",
"sex" : 2
}, {
"name" : "Robot",
"sex" : 9
} ]
}
***** JSON → Mydata *****
name=[Peko], sex=[NOT_KNOWN]
name=[Anubis], sex=[MALE]
name=[Isis], sex=[FEMALE]
name=[Robot], sex=[NOT_APPLICABLE]
Recommended Posts