Heim  >  Artikel  >  Java  >  So konfigurieren Sie die Serialisierung in Springboot im Bezirk Dongba

So konfigurieren Sie die Serialisierung in Springboot im Bezirk Dongba

王林
王林nach vorne
2023-05-21 20:55:261191Durchsuche

SpringBoot-Standardkonfiguration verwenden

SpringBoot verwendet standardmäßig die UTC-Zeit. Wenn wir die Zeit des East Eighth District verwenden müssen, können wir die folgende Konfiguration verwenden:

spring:
  jackson:
    time-zone: GMT+8

Diese Methode ist die einfachste Methode und erfordert keine zusätzlichen Abhängigkeiten und Code. Dies ist jedoch erforderlich. Beachten Sie, dass diese Konfiguration global wirksam ist und sich möglicherweise auf andere Orte auswirkt, die die UTC-Zeit verwenden müssen. Jedes Mal, wenn Sie eine neue Abhängigkeit hinzufügen, die SpringBoot-Version aktualisieren usw., müssen Sie erneut überprüfen, ob die Konfiguration korrekt ist.

Benutzerdefinierte Konfigurationsklasse

Eine andere Möglichkeit besteht darin, die Konfigurationsklasse anzupassen. Verwenden Sie die Annotation @Configuration, um eine Konfigurationsklasse zu erstellen, und konfigurieren Sie dann den Jackson2ObjectMapperBuilderCustomizer in der Klasse, indem Sie die Zeitzone als East Eighth District angeben.

@Configuration
public class JacksonConfiguration {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.timeZone(TimeZone.getTimeZone("GMT+8"));
    }
}

Diese Methode erfordert benutzerdefinierten Code, kann jedoch den Zeitbereich des East Eighth District flexibler steuern und hat keine Auswirkungen auf andere Orte, die UTC-Zeit verwenden müssen. Beachten Sie, dass Sie jedes Mal, wenn Sie eine neue Abhängigkeit hinzufügen oder die SpringBoot-Version aktualisieren, erneut bestätigen müssen, ob die Konfiguration korrekt ist.

Angepasster ObjectMapper

Sie können die Zeit des East Eighth District auch nutzen, indem Sie Jacksons ObjectMapper anpassen.

Die spezifische Implementierungsmethode besteht darin, ein benutzerdefiniertes JavaTimeModule für den ObjectMapper festzulegen und dann die Zeitzone für das Modul auf East Eighth District festzulegen.

Der Beispielcode lautet wie folgt:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper() {
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
        this.registerModule(javaTimeModule);
        this.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
    }
}

Im obigen Beispiel haben wir einen CustomObjectMapper erstellt, der von ObjectMapper erbt, und die Serialisierungs- und Deserialisierungsmethoden dieses Moduls verwendet installiert sind und die Zeitzone auf Asien/Shanghai eingestellt ist. Sie können bei Bedarf auch andere Zeitserialisierungs- und Deserialisierungsmethoden hinzufügen.

Verwenden Sie das benutzerdefinierte CustomObjectMapper-Objekt im Code für die Serialisierung und Deserialisierung, um die Zeit des East Eighth District zu verwenden. Zum Beispiel:

CustomObjectMapper objectMapper = new CustomObjectMapper();
String jsonString = objectMapper.writeValueAsString(yourObject);
YourObject deserializedObject = objectMapper.readValue(jsonString, YourObject.class);

Es ist erwähnenswert, dass Sie, wenn Sie einen benutzerdefinierten ObjectMapper in Spring Boot verwenden müssen, entsprechende Konfigurationen in der Konfigurationsklasse vornehmen müssen:

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        return new CustomObjectMapper();
    }
}

Nach der Konfiguration auf diese Weise verwenden Sie @Autowired, um den ObjectMapper einzufügen Objekt im Code Nur

Benutzerdefinierter Serializer

Eine Möglichkeit, den Serializer anzupassen, besteht darin, die Zeit in die Zeit des East Eighth District umzuwandeln und sie während des Serialisierungsprozesses zu verwenden. Implementieren Sie die JsonSerializer-Schnittstelle, um den Serializer in der Annotation @JsonSerialize anzugeben. Der spezifische Code lautet wie folgt:

public class ChinaZoneDateTimeSerializer extends JsonSerializer<ZonedDateTime> {

    @Override
    public void serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(value.withZoneSameInstant(ZoneId.of("GMT+8")).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
    }
}

Verwenden Sie dann die Annotation @JsonSerialize für das Zeitfeld des Objekts, das serialisiert werden muss, um den Serialisierer anzugeben.

@JsonSerialize(using = ChinaZoneDateTimeSerializer.class)
private ZonedDateTime createTime;

Diese Methode kann das Zeitformat und die Konvertierungslogik flexibler steuern, erfordert jedoch benutzerdefinierten Code und die Annotation @JsonSerialize muss zu jedem Zeitfeld hinzugefügt werden, das konvertiert werden muss, was etwas aufdringlich ist.

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie die Serialisierung in Springboot im Bezirk Dongba. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen