2016-12-11 5 views
2

Я заменяю JodaTime на JSR310, и модуль JodaTime() работает нормально.Сериализовать дату, мгновенно до ISO 8601 при использовании JSR310 java.time весной

Я пытаюсь перенастроить сериализацию своих дат в моем приложении для загрузки весной.

Я не могу держать и поэтому я ищу способ сериализации/десериализации мою дату ISO 8601.

Я следовал советам здесь, но это не помогает: http://lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/

Этот мой JacksonConfig.java с objectMapper:

@Configuration 
public class JacksonConfig extends RepositoryRestMvcConfiguration { 

    private static final Logger logger = LoggerFactory.getLogger(JacksonConfig.class); 
    public static final DateTimeFormatter FORMATTER = ofPattern("dd::MM::yyyy"); 

    @Bean 
    // Override and Primary due to bug: https://github.com/spring-projects/spring-boot/issues/6529 
    @Override 
    @Primary 
    public ObjectMapper objectMapper() { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); 
     mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
     JavaTimeModule javaTimeModule = new JavaTimeModule(); 
     javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer()); 
     javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer()); 
     mapper.registerModule(javaTimeModule); 
     return mapper; 
    } 

    public class LocalDateSerializer extends JsonSerializer<LocalDate> { 
     @Override 
     public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException { 
      gen.writeString(value.format(FORMATTER)); 
     } 
    } 
    public class LocalDateDeserializer extends JsonDeserializer<LocalDate> { 
     @Override 
     public LocalDate deserialize(JsonParser p, DeserializationContext ctx) throws IOException { 
      return LocalDate.parse(p.getValueAsString(), FORMATTER); 
     } 
    } 
} 

боб получить инстанциирован но serialize и deserialize никогда не дозвонились.

Я также пробовал JavaTimeModule без специального сериализатора/десериализатора, он также не работает.

Это, кажется, не имеет никакого эффекта.

Есть ли способ отладить это немного больше?

Я использую пружинные hateoas и пружинные данных, у меня есть вопрос, который может быть связан:

https://github.com/spring-projects/spring-hateoas/issues/333

ответ

1

использование сделать из Ser/Deser, предусмотренного в модуле времени Java. Это фактически устанавливает их с помощью пользовательского форматирования.

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; 
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; 

public ObjectMapper objectMapper() { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); 
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
    JavaTimeModule javaTimeModule = new JavaTimeModule(); 
    LocalDateSerializer localDateSerializer = new LocalDateSerializer(FORMATTER); 
    javaTimeModule.addSerializer(LocalDate.class, localDateSerializer); 
    LocalDateDeserializer localDateDeserializer = new LocalDateDeserializer(FORMATTER); 
    javaTimeModule.addDeserializer(LocalDate.class, localDateDeserializer); 
    mapper.registerModule(javaTimeModule); 
    return mapper; 
} 
+0

Знаете ли вы, почему это не имеет никакого эффекта и как может. Я отлаживаю это? Как я уже сказал, сериализация десериализатора никогда не срабатывает – BigDong

+0

Как я могу добавить их непосредственно к объекту mapper? Мне не жалко – BigDong

+0

Вы можете попробовать это, не регистрируя модуль времени java. Добавьте ser/deser с помощью простого модуля и зарегистрируйте модуль в mapper.SimpleModule module = new SimpleModule(); module.addSerializer (LocalDate.class, новый LocalDateSerializer()); mapper.registerModule (модуль); что-то вроде этого. – Veeram