La fonctionnalité Liberty JAX-RS 2.0 inclut Jackson pour effectuer une sérialisation de base des classes Java en JSON, mais elle n'expose aucune des API Jackson.
Si vous souhaitez modifier le comportement de Jackson, vous devez regrouper ces bibliothèques dans votre application afin que Liberty utilise le Jackson que vous avez fourni, plutôt que celui qu'il possède en interne :
Ensuite, vous pouvez également inclure le Module Jackson JSR310 pour obtenir vos temps Java 8 sérialisés comme vous le souhaitez.
Cependant, selon la documentation de cette page, vous devez enregistrer le module avec votre mappeur d'objets.
Vous voulez appeler JacksonJsonProvider.setMapper()
mais ce n'est pas simple, car cet objet est généralement instancié automatiquement par Liberty et vous ne le voyez jamais.
En revanche, vous pouvez créer un ContextProvider pour indiquer au fournisseur JAX-RS de Jackson quel ObjectMapper utiliser lorsqu'il est instancié par Liberty.
En adaptant l'exemple de votre lien, vous pourriez écrire quelque chose comme ceci :
@Provider
public class JSR310MapperProvider implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(Class<?> type) {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return mapper;
}
}
Cela devrait créer un mappeur configuré qui devrait ensuite être utilisé par Jackson pour sérialiser vos objets temporels Java 8.
Mise à jour : Si vous remplacez getClasses()
dans votre Application
la classe JacksonJsonProvider
et votre JSR310MapperProvider
ne sera pas automatiquement découvert. Vous devrez inclure ces deux classes dans l'ensemble que vous retournez à partir de getClasses()