Heim >Java >javaLernprogramm >Jackson-Datumsformatierungsmethode in SpringBoot

Jackson-Datumsformatierungsmethode in SpringBoot

王林
王林nach vorne
2023-05-20 11:46:541305Durchsuche

Jacksons Fähigkeiten zur Datumsformatierung

Bei Verwendung von Spring Boot müssen Sie Jackson verwenden, um einige JSON-Serialisierungsprobleme vom Typ Java Time zu lösen. Bei der Verarbeitung von Feldern einiger Klassen können Sie das Format angeben, indem Sie dem Eigenschaftenstil direkt Anmerkungen hinzufügen. Allerdings ist gestern ein Kollege auf ein Problem bei der Formatierung von Map Daten gestoßen, sodass das Formatierungsstilproblem nicht durch Hinzufügen von Anmerkungen gelöst werden kann.

Nach mehreren Recherchen im Internet und verschiedenen Versuchen habe ich dieses Problem endlich gelöst und es zum späteren Nachschlagen aufgezeichnet.

Kommen wir ohne Umschweife direkt zum Code:

package com.diguage.demo.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import static com.fasterxml.jackson.databind.SerializationFeature.*;
import static java.time.format.DateTimeFormatter.ofPattern;
/<strong>
 * 配置类
 *
 * @author D瓜哥 · <a href="https://www.diguage.com/" rel="external nofollow"  rel="external nofollow"  target="_blank" >https://www.diguage.com</a>
 */
@Configuration
public class Config {
    /</strong>
     * 创建 ObjectMapper 对象,配置日期格式化
     *
     * @author D瓜哥 · <a href="https://www.diguage.com/" rel="external nofollow"  rel="external nofollow"  target="_blank" >https://www.diguage.com</a>
     */
    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        String dateTimepattern = "yyyy-MM-dd HH:mm:ss";
        String datePattern = "yyyy-MM-dd";
        DateFormat dateFormat = new SimpleDateFormat(dateTimepattern);
        mapper.setDateFormat(dateFormat);
        mapper.configure(WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true));
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addDeserializer(LocalDate.class,
                new LocalDateDeserializer(ofPattern(datePattern)));
        javaTimeModule.addSerializer(LocalDate.class,
                new LocalDateSerializer(ofPattern(datePattern)));
        javaTimeModule.addDeserializer(LocalDateTime.class,
                new LocalDateTimeDeserializer(ofPattern(dateTimepattern)));
        javaTimeModule.addSerializer(LocalDateTime.class,
                new LocalDateTimeSerializer(ofPattern(dateTimepattern)));
        mapper.registerModule(javaTimeModule);
        return mapper;
    }
}

Folgefragen

Ich frage mich, wie es sich verhält, wenn einige Felder mit Formatierungsstil-Anmerkungen verarbeitet werden, nachdem der Datumsformatierungsstil auf diese Weise angegeben wurde? Haben Sie die Möglichkeit, es auszuprobieren.

Ergänzung: Jackson Unified Configuration Date Conversion Format

Methode 1: Konfigurieren Sie

spring:
    jackson:
        default-property-inclusion: ALWAYS
        time-zone: GMT+8
        date-format: yyyy-MM-dd HH:mm:ss

in der Konfigurationsdatei yml. Nach der Serialisierung wird der Datumstyp in das Format in der Konfiguration formatiert.

Methode 2: In der Konfigurationsklasse konfigurierenJacksonConfig.java erstellen

@Configuration
public class JacksonConfig {

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public Jackson2ObjectMapperBuilderCustomizer customJackson() {
        return new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder builder) {
                builder.serializerByType(LocalDateTime.class,
                        new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                builder.serializerByType(LocalDate.class,
                        new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                builder.serializerByType(LocalTime.class,
                        new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                builder.deserializerByType(LocalDateTime.class,
                        new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                builder.deserializerByType(LocalDate.class,
                        new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                builder.deserializerByType(LocalTime.class,
                        new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
                builder.serializationInclusion(JsonInclude.Include.NON_NULL);
                builder.failOnUnknownProperties(false);
                builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            }
        };
    }
}

Das obige ist der detaillierte Inhalt vonJackson-Datumsformatierungsmethode in SpringBoot. 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