Ce que je voudrais
dans une botte Spring 1.5.2 projet, je vous envoie des files d'attente/sujets messages JSON à certains JMS (ActiveMQ) via JmsTemplate#convertAndSend. J'utilise Java 8 avec quelques instances de LocalDate
et LocalDateTime
. Je voudrais changer la sortie JSON légèrement:sortie Configurer JSON dans les messages JMS Spring
- joliment imprimer le JSON; et
- rendre les dates/horodatages au format ISO.
Par défaut, le JSON finit en une seule ligne, et les dates/horodatages sont convertis en un format par champs, par exemple:
"startDate" : { "year" : 2017, "month" : "MARCH", "era" : "CE", "dayOfYear" : 64, "dayOfWeek" : "SUNDAY", "leapYear" : false, "dayOfMonth" : 5, "monthValue" : 3, "chronology" : { "calendarType" : "iso8601", "id" : "ISO" } }
Ce que j'ai essayé
Je avons ajouté jackson-datatype-jsr310
aux dépendances du projet et je l'ai également mis
spring.jackson.serialization.indent-output=true
spring.jackson.serialization.write_dates_as_timestamps=false
dans application.properties
. Pas de changement de comportement.
J'ai ensuite essayé modifier l'initialisation du convertisseur de message à inclure ces paramètres:
@Bean
@Primary
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
ObjectMapper objectMapper = new ObjectMapper();
// default settings for MappingJackson2MessageConverter
objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// add settings I want
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
converter.setObjectMapper(objectMapper);
return converter;
}
Mais il n'y a toujours pas de changement de comportement.
Comment personnaliser la sortie JSON comme décrit ci-dessus?