webentwicklung-frage-antwort-db.com.de

Wie verwende ich die 'spring.jackson.date-format'-Eigenschaft von Spring Boot?

Laut Current SpringBoot Reference Guide wenn ich den spring.jackson.date-format Eigenschaft wird es: Date format string or a fully-qualified date format class name. For instance 'yyyy-MM-dd HH:mm:ss'.

Mit Spring Boot 1.5.3 funktioniert dies jedoch nicht.

Um zu demonstrieren, beginnend mit dieser Klasse:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import Java.time.Instant;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

@RestController
class NowController{

  @GetMapping("/now")
  Instant getNow(){
    return Instant.now();
  }

}

und das src/main/resources/application.properties

spring.jackson.date-format=dd.MM.yyyy

und das build.gradle:

buildscript {
    ext {
        springBootVersion = '1.5.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'org.springframework.boot'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('com.fasterxml.jackson.datatype:jackson-datatype-jdk8')
    compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Ich bekomme folgendes:

http localhost:8080/now
HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Tue, 25 Apr 2017 22:37:58 GMT
Transfer-Encoding: chunked

"2017-04-25T22:37:58.319Z"

Beachten Sie, dass dies nicht das angegebene Format ist dd.MM.yyyy. Ist etwas anderes erforderlich, ist spring.jackson.date-format funktioniert nicht wie dokumentiert?

13
peterl

Diese Eigenschaft wird nur für die Java.util.Date - Serialisierung und nicht für die Java.time.* - Klassen verwendet.

Sie können bei Bedarf (pro Feld) ein Format festlegen, das mit @JsonFormat(pattern="dd.MM.yyyy") angegeben wird.

oder

Erstellen Sie ein Bean, das die Schnittstelle org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer Implementiert, und richten Sie im ObjectMapper benutzerdefinierte Serialisierer für Klassen Java.time.* Ein, die ein vernünftigeres Format verwenden.

8
Strelok