2017-03-09 151 views
1

配置JSON输出我想

在春季启动1.5.2什么项目,我通过JmsTemplate#convertAndSend发送JSON消息,一些JMS(ActiveMQ的)队列/主题。我使用Java 8,其中一些实例为LocalDateLocalDateTime。我想稍微改变JSON输出:在Spring JMS消息

  • pretty-print the JSON;和
  • 以ISO格式呈现日期/时间戳。

默认情况下,JSON最终都在一个行,日期/时间戳转换为派出格式,例如:

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

我已经试过

我已经添加了jackson-datatype-jsr310到项目依赖我还设置

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

application.properties。行为没有变化。

我又试图修改消息变换的初始化包括以下设置:

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

但仍然有任何变化。

如何定制上述的JSON输出?

回答

2

而且配置对象映射器,像这样:在线路

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); 

这个答案在这里:https://stackoverflow.com/a/41089874/72625