>  기사  >  Java  >  Dongba District의 springboot에서 직렬화를 구성하는 방법

Dongba District의 springboot에서 직렬화를 구성하는 방법

王林
王林앞으로
2023-05-21 20:55:261241검색

SpringBoot 기본 구성 사용

SpringBoot는 기본적으로 UTC 시간을 사용합니다. East Eighth District 시간을 사용해야 하는 경우 다음 구성을 사용할 수 있습니다.

spring:
  jackson:
    time-zone: GMT+8

이 방법은 가장 간단한 방법이며 추가 종속성 및 코드가 필요하지 않습니다. 하지만 필수입니다. 이 구성은 전역적으로 유효하며 UTC 시간을 사용해야 하는 다른 위치에 영향을 미칠 수 있으며 새 종속성을 추가하거나 SpringBoot 버전을 업그레이드하는 등의 작업을 할 때마다 구성이 올바른지 확인해야 합니다.

사용자 정의 구성 클래스

또 다른 방법은 구성 클래스를 사용자 정의하는 것입니다. @Configuration 주석을 사용하여 구성 클래스를 만든 다음 클래스에서 Jackson2ObjectMapperBuilderCustomizer를 구성하고 시간대를 East Eighth District로 지정합니다.

@Configuration
public class JacksonConfiguration {

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

이 방법에는 사용자 정의 코드가 필요하지만 동부 8구 시간 범위를 보다 유연하게 제어할 수 있으며 UTC 시간을 사용해야 하는 다른 장소에는 영향을 미치지 않습니다. 새로운 종속성을 추가하거나 SpringBoot 버전을 업그레이드할 때마다 구성이 올바른지 다시 확인해야 한다는 점에 유의해야 합니다.

Customized ObjectMapper

Jackson의 ObjectMapper를 사용자 정의하여 East Eighth District 시간을 사용할 수도 있습니다.

구체적인 구현 방법은 ObjectMapper에 사용자 정의 JavaTimeModule을 설정한 다음 모듈의 시간대를 East Eighth District로 설정하는 것입니다.

샘플 코드는 다음과 같습니다.

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

위 예제에서는 ObjectMapper를 상속하는 CustomObjectMapper를 생성하고 객체에 사용자 정의 JavaTimeModule을 등록했습니다. 이 모듈의 직렬화 및 역직렬화 메서드는 각각 LocalDateTimeSerializer 및 LocalDateTimeDeserializer를 사용합니다. 설치되어 있으며, 시간대는 아시아/상하이로 설정되어 있습니다. 필요에 따라 다른 시간 직렬화 및 역직렬화 방법을 추가할 수도 있습니다.

동부 8구 시간을 사용하려면 직렬화 및 역직렬화를 위한 코드에서 사용자 정의 CustomObjectMapper 개체를 사용하세요. 예:

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

Spring Boot에서 사용자 정의 ObjectMapper를 사용해야 하는 경우 구성 클래스에서 관련 구성을 만들어야 한다는 점에 유의할 가치가 있습니다.

@Configuration
public class JacksonConfig {

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

이러한 방식으로 구성한 후 @Autowired를 사용하여 ObjectMapper를 주입합니다.

Custom Serializer

직렬 변환기를 사용자 정의하는 한 가지 방법은 시간을 East Eighth District 시간으로 변환하여 직렬화 프로세스 중에 사용하는 것입니다. @JsonSerialize 주석에 직렬 변환기를 지정하려면 JsonSerializer 인터페이스를 구현하세요. 구체적인 코드는 다음과 같습니다.

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

그런 다음 직렬화해야 하는 개체의 시간 필드에 @JsonSerialize 주석을 사용하여 직렬 변환기를 지정합니다.

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

이 방법은 시간 형식과 변환 논리를 더 유연하게 제어할 수 있지만 사용자 정의 코드가 필요하고 변환해야 하는 각 시간 필드에 @JsonSerialize 주석을 추가해야 하는데 이는 다소 방해가 됩니다.

위 내용은 Dongba District의 springboot에서 직렬화를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제