web-dev-qa-db-fra.com

Spring Boot - Sérialisation JSON personnalisée

J'utilise généralement des mixins pour effectuer une sérialisation et une désérialisation personnalisées lors de l'utilisation de Jackson Library. Mon RestController dans l'application Spring Boot a des méthodes similaires à celle répertoriée ci-dessous. Je suppose que Spring Boot utilise Jackson pour sérialiser la VerifyAccountResponse en chaîne. Cependant, cela convertit mes objets calendrier/date en une valeur longue lorsqu'ils sont convertis en chaîne. Je suis capable de les convertir au format approprié en utilisant un sérialiseur personnalisé. Cependant, je dois changer le type de retour en objet après la sérialisation. Existe-t-il un moyen de conserver la même signature et d'ajouter un sérialiseur personnalisé à la sérialisation par défaut effectuée par Spring Boot.

@RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<VerifyAccountResponse> verifyAccount(@RequestBody VerifyAccountRequest request) {

    VerifyAccountResponse response = service.verifyAccount(request);

    return new ResponseEntity<VerifyAccountResponse>(response, HttpStatus.OK);
}

ÉDITER:

Updated the below based on the answers , but mixin doesn't seem to take effect -

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.mixIn(ConnectStatus.class, com.datacast.service.util.DateFormatSerializerMixin.class);

    return builder;
}

EDIT 2:

J'ai créé un projet de démarrage à ressort simple pour tester cela et cela fonctionne très bien. Mais lorsque j'utilise cette approche dans mon plus grand projet, la conversion de date ne se produit pas. Pourrait-il y avoir quelque chose qui remplace Jackson2ObjectMapperBuilder?

5
Punter Vicky

Vous pouvez personnaliser le sérialiseur Jackson dans une application Spring Boot de différentes manières. Veuillez consulter la documentation concernant jackson dans le guide de référence de Spring Boot:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/howto.html#howto-customize-the-jackson-objectmapper

Vous pouvez configurer un sérialiseur personnalisé en utilisant Jackson2ObjectMapperBuilder .

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.html#serializerByType-Java.lang.Class-com.fasterxml. jackson.databind.JsonSerializer -

7
Lakatos Gyula

Vous pouvez personnaliser le format de la date (si je comprends bien, c'est la raison principale de votre message) en définissant la propriété

spring.jackson.date-format= 
# Date format string or a fully-qualified date format class name.
For instance `yyyy-MM-dd HH:mm:ss`.
5
dmytro