ホームページ  >  記事  >  Java  >  東巴区のスプリングブートでシリアル化を構成する方法

東巴区のスプリングブートでシリアル化を構成する方法

王林
王林転載
2023-05-21 20:55:261241ブラウズ

SpringBoot のデフォルト設定を使用する

SpringBoot はデフォルトで UTC 時間を使用します。東第 8 地区時間を使用する必要がある場合は、次の設定を使用できます:

spring:
  jackson:
    time-zone: GMT+8

この方法は最も簡単な方法です追加の依存関係とコードが必要ですが、この構成はグローバルに有効であり、UTC 時間を使用する必要がある他の場所に影響を与える可能性があることに注意する必要があり、新しい依存関係が追加されるたびに、SpringBoot バージョンを再度確認する必要があります。アップグレードされているなど。設定は正しいですか?

カスタム構成クラス

もう 1 つの方法は、構成クラスをカスタマイズし、@Configuration アノテーションを使用して構成クラスを作成し、クラス内で Jackson2ObjectMapperBuilderCustomizer を構成し、タイム ゾーンを指定することです。東第8地区。

@Configuration
public class JacksonConfiguration {

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

この方法にはカスタム コードが必要ですが、東 8 地区時間の範囲をより柔軟に制御でき、UTC 時間を使用する必要がある他の場所には影響しません。新しい依存関係を追加したり、SpringBoot のバージョンをアップグレードしたりするたびに、構成が正しいかどうかを再確認する必要があることに注意してください。

カスタマイズされた ObjectMapper

Jackson の ObjectMapper をカスタマイズして、東 8 地区の時間を使用することもできます。

具体的な実装方法は、ObjectMapper にカスタム JavaTimeModule を設定し、モジュールのタイムゾーンを東巴区に設定することです。

サンプル コードは次のとおりです:

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 オブジェクトを挿入します。

カスタム シリアライザー

シリアライザーをカスタマイズする 1 つの方法は、時間を東部 8 地区時間に変換し、プロセス中にそれをシリアル化して使用することです。 @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));
    }
}

次に、シリアル化する必要があるオブジェクトの time フィールドに @JsonSerialize アノテーションを使用して、シリアライザーを指定します。

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

このメソッドは時刻形式と変換ロジックをより柔軟に制御できますが、カスタム コードが必要であり、変換する必要がある各時刻フィールドに @JsonSerialize アノテーションを追加する必要があり、これにはある程度の効果があります。コード侵入です。

以上が東巴区のスプリングブートでシリアル化を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。