[JAVA] Comment sérialiser et désérialiser le type LocalDateTime avec GSON

J'étais dans une situation où j'utilisais GSON pour sérialiser et désérialiser le type LocalDateTime, alors notez comment l'utiliser.

Classe cible

Il existe un membre de type LocalDateTime dans SampleDto.

SampleDto.java


public class SampleDto implements JsonSerializer<SampleDto>, JsonDeserializer<SampleDto> {
	private static final long serialVersionUID = 8349420239867344581L;

	private String key;
	private LocalDateTime localDateTime = LocalDateTime.now();

	public SampleDto(String key, LocalDateTime localDateTime) {
		this.key = key;
		this.localDateTime = localDateTime;
	}

	@Override
	public JsonElement serialize(SampleDto src, Type typeOfSrc, JsonSerializationContext context) {
		DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
		JsonObject result = new JsonObject();
		result.add("key", new JsonPrimitive(key));
		// LocalDateTime Serialize
		result.add("localDateTime", new JsonPrimitive(formatter.format(localDateTime)));
		return result;
	}

	@Override
	public SampleDto deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
			throws JsonParseException {
		DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
		final JsonObject jsonObject = json.getAsJsonObject();
		String key = jsonObject.get("key").getAsString();
		// LocalDateTime Deserialize
		LocalDateTime localDateTime = formatter.parse(jsonObject.get("localDateTime").getAsString(),
				LocalDateTime::from);

		return new SampleDto(key, localDateTime);
	}

	public LocalDateTime getLocalDateTime() {
		return localDateTime;
	}
}

Classe d'essai

J'ai également créé une classe de test comme suit.

SampleDtoTest.java


ublic class SampleDtoTest {
	private static Gson gson;
	private static final GsonBuilder gsonBuilder = new GsonBuilder();
	private static SampleDto sampleDto;

	@BeforeClass
	public static void createGson() {
		gsonBuilder.registerTypeAdapter(SampleDto.class, new SampleDto("test", LocalDateTime.of(2018, 06, 11, 00, 00)));
		gson = gsonBuilder.create();
	}

	@BeforeClass
	public static void generateData() {
		sampleDto = new SampleDto("test", LocalDateTime.of(2018, 06, 11, 00, 00));
	}

	@Test
	public void testJSON() {
		String json = gson.toJson(sampleDto);
		SampleDto fromJson = gson.fromJson(json, SampleDto.class);
		assertTrue(fromJson.getLocalDateTime().equals(sampleDto.getLocalDateTime()));
	}
}

Recommended Posts

Comment sérialiser et désérialiser le type LocalDateTime avec GSON
Comment créer une API avec GraphQL et Rails
Comment repousser la barre oblique \
Comment installer Gradle et Kotlin avec SDKMAN (Mac)
Comment numéroter (nombre) avec html.erb
Comment mettre à jour avec activerecord-import
Comment gérer différentes versions de rbenv et Ruby
Comment utiliser StringBurrer et Arrays.toString.
Comment démarrer avec Slim
Comment utiliser EventBus3 et ThreadMode
Comment entourer n'importe quel caractère avec "~"
Comment appeler des classes et des méthodes
[Astuces] Comment résoudre les problèmes avec XCode et Swift pour les débutants
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment utiliser mssql-tools avec Alpine
Comment connecter Heroku et Sequel
[Pratique à retenir !!!] Comment convertir du type LocalDate en chaîne de caractères et de la chaîne de caractères en type LocalDate
[Java] Comment convertir du type String en type Path et obtenir le chemin
Formez et sérialisez bien avec Jackson
Comment démarrer Camunda avec Docker
Comment utiliser le type enum Java
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Comment réaliser une recherche hybride en utilisant l'analyse morphologique et Ngram avec Solr
[Swift] Comment connecter TabBar avec Storyboard Reference et également utiliser NavigationController
Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose
Exécutable serveur avec Spring gradle Comment créer JAR et WAR
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Java8 / 9 Beginners: Streaming API addiction points et comment les gérer
Comment recadrer une image avec libGDX
Comment ajuster TextPosition avec l'extension de clavier iOS
Comment partager des fichiers avec Docker Toolbox
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
[Android] Comment gérer les thèmes sombres
Comment utiliser BootStrap avec Play Framework
Comment changer d'images miniatures avec JavaScript
[Note] Comment démarrer avec Rspec
[Java] Comment sortir et écrire des fichiers!
Comment faire un contrôle basé sur l'API avec cancancan
Comment configurer et utiliser kapt
Comment réaliser le téléchargement de fichiers avec Feign
Comment créer SquashTM et comment prendre en charge le japonais
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment implémenter TextInputLayout avec la fonction de validation
Comment trouver les dizaines et les unités
Comment gérer les erreurs de connexion avec l'appareil
Comment supprimer des données avec une clé externe
[Facile] Comment mettre à niveau Ruby et le bundler
Comment tester l'étendue privée avec JUnit
Comment surveiller nginx avec docker-compose avec datadog