2016-06-16 13 views
0

Ich arbeite an einem Spring WebMvc (nicht Spring Boot) -Projekt, das Pure-Java-Konfiguration zum Einrichten seiner Beans verwendet. Ich habe Schwierigkeiten, Spring/Jackson dazu zu bringen, die Annotation @DateTimeFormat mit java.time (jsr310) -Objekten wie LocalDateTime zu berücksichtigen.Spring DateTimeFormat Konfiguration für java.time

Ich habe sowohl jackson-datentyp-jsr310 und jackson-databind jars (Version 2.7.4) auf dem Klassenpfad, zusammen mit den entsprechenden Sprungfedern für eine grundlegende webmvc-Anwendung spring-context und spring-webmvc (Version 4.3.0 .RELEASE)

Hier ist meine relevante Konfigurationsklasse:

@Configuration 
@ComponentScan({"com.example.myapp"}) 
public class WebAppConfig extends WebMvcConfigurationSupport { 
    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     ObjectMapper mapper = Jackson2ObjectMapperBuilder 
      .json() 
      .indentOutput(true) 
      .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) 
      .findModulesViaServiceLoader(true) 
      .build(); 

     converters.add(new MappingJackson2HttpMessageConverter(mapper)); 

     super.addDefaultHttpMessageConverters(converters); 
    } 
} 

ich das getestet habe mit meinen Datenmodellen über einen Rest Controller Serialisierung. Scheint, dass Jackson @ JsonFormat respektiert, aber @DateTimeFormat vollständig ignoriert.

Welche zusätzliche Konfiguration fehlt mir, um Spring/Jackson zu bekommen, @DateTimeFormat zu respektieren? Gibt es irgendwelche wesentlichen Unterschiede zwischen den beiden Anmerkungen, die ich beachten sollte, Probleme, denen ich nur mit @JsonFormat begegnen könnte?

Antwort

2

@JsonFormat ist eine Jackson Annotation; @DateTimeFormat ist eine Spring-Anmerkung.

@JsonFormat wird die Formatierung während der Serialisierung von LocalDateTime zu JSON steuern.

Jackson weiß nichts über Spring @DateTimeFormat, mit dem die Formatierung einer Bean in Spring gesteuert wird, wenn sie in der JSP-Ansicht gerendert wird.

Javadocs:

http://docs.spring.io/spring-framework/docs/4.2.3.BUILD-SNAPSHOT/javadoc-api/org/springframework/format/annotation/DateTimeFormat.html

http://static.javadoc.io/com.fasterxml.jackson.core/jackson-annotations/2.7.5/com/fasterxml/jackson/annotation/JsonFormat.html

+0

glaube, ich war meistens verwirrt (korrigiert mich wenn ich falsch liege) an Beispielen online seit suchen, bedeutet, dass es Szenarien, in denen ich möglicherweise brauchen könnte beide Annotationen für Java-Zeiteigenschaften verwenden Zum Beispiel, wenn ich eine Bohne sowohl durch Pause (mit Jackson) als auch als eine federformatierte Zeichenfolge auf einer JSP-Seite verfügbar machen wollte. – Alex

+0

Korrigieren Sie @Alex, Sie müssen möglicherweise beide verwenden. – ck1