2017-03-09 5 views
1

Was ich

in einem Frühjahr Boot-1.5.2-Projekt möchte, schicke ich JSON-Nachrichten an einigen JMS (ActiveMQ) Warteschlangen/Themen über JmsTemplate#convertAndSend. Ich verwende Java 8 mit einigen Instanzen von LocalDate und LocalDateTime. Ich möchte die JSON-Ausgabe leicht ändern:Configure JSON Ausgabe im Frühjahr JMS-Nachrichten

  • Pretty-Print der JSON; und
  • Renderdaten/Zeitstempel im ISO-Format.

Standardmäßig endet die JSON bis alles in einer Zeile und Termine/Zeitstempel auf ein FIELDed Format umgewandelt, zum Beispiel:

"startDate" : { "year" : 2017, "month" : "MARCH", "era" : "CE", "dayOfYear" : 64, "dayOfWeek" : "SUNDAY", "leapYear" : false, "dayOfMonth" : 5, "monthValue" : 3, "chronology" : { "calendarType" : "iso8601", "id" : "ISO" } } 

Was ich versucht habe

I‘ ve jackson-datatype-jsr310 zu den Projektabhängigkeiten hinzugefügt und ich habe setzen auch

spring.jackson.serialization.indent-output=true 
spring.jackson.serialization.write_dates_as_timestamps=false 

in application.properties. Keine Änderung im Verhalten.

ich dann versucht, die Initialisierung des Nachrichtenwandlers Änderung dieser Einstellungen umfassen:

@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; 
} 

Aber es gibt immer noch keine Änderung im Verhalten.

Wie kann ich die JSON-Ausgabe wie oben beschrieben anpassen?

Antwort

2

konfigurieren Weitere das Objekt Mapper wie so:

JavaTimeModule timeModule = new JavaTimeModule(); 
    timeModule.addSerializer(LocalDate.class, 
     new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); 
    timeModule.addSerializer(LocalDateTime.class, 
     new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); 
    objectMapper.registerModule(timeModule); 

in Einklang mit dieser Antwort hier: https://stackoverflow.com/a/41089874/72625