programing

스프링 부트의 OffsetDateTime에 대한 Jackson 날짜 형식

telebox 2023. 3. 23. 22:37
반응형

스프링 부트의 OffsetDateTime에 대한 Jackson 날짜 형식

Spring 어플리케이션에서 OffsetDateTime을 출력하려고 하는데 어플리케이션.properties에 다음 속성이 있습니다.

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm

단, 반환되는 날짜는 다음과 같이 포맷됩니다.

"2017-01-30T16:55:00Z"

Spring 어플리케이션에서 날짜 형식을 올바르게 설정하려면 어떻게 해야 합니까?

그래서 어떻게든 해결책을 찾아냈지만, 대안이 있다면 올려주세요.

결국 새로운 프라이머리(Primary)를 작성하게 되었습니다.ObjectMapperbean 및 커스텀시리얼라이저에 신규 모듈 등록OffsetDateTime여기서 나만의 날짜 형식을 설정할 수 있습니다.java.time.format.DateTimeFormatter등록도 해야 했어요.JavaTimeModule매퍼와 함께요

@Configuration
public class JacksonOffsetDateTimeMapper{

    @Primary
    @Bean
    public ObjectMapper objectMapper() {

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
            @Override
            public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
            }
        });
        objectMapper.registerModule(simpleModule);

        return objectMapper;
    }

}
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

이렇게 하면 표적에 오프셋을 포함하여 OffsetDateTime 특성을 ISO 8601로 가져올 수 있습니다.

jackson-modules-java8에 대한 의존관계 추가가 효과적(jackson-datatype-jsr310은 권장되지 않음)

<!-- deserialize Java 8 date time types e.g OffsetDateTime --> 
<dependency> 
  <groupId>com.fasterxml.jackson.module</groupId>
  <artifactId>jackson-modules-java8</artifactId>
</dependency>

또, 동작시키기 위해서, 다음과 같이 추가할 필요가 있었습니다.

 om.registerModule(new JavaTimeModule());

write-disable-as-disables=false 또는 om.disable(Serialization Feature)은 필요 없습니다.WRITE_DATS_AS_TIMESTAMPS) - Java "Date" 개체에 적용됩니다.

이 주석을 사용했습니다.

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")  

다음과 같은 출력을 얻을 수 있습니다.

"context":1904-04-23T08:00:00.000-06:00"

  1. 의존관계에 jackson-datatype-jsr310 추가
  2. application.properties에 추가합니다.

    spring.jackson.serialization.write-dates-as-timestamps=false
    

다음과 같은 이점을 얻을 수 있습니다.

"lastUpdated": "2017-07-16T19:17:57.689Z"

스프링 숙박 시설은 나에게도 맞지 않는다.속성 설정ObjectMapper그래도 난 괜찮아.

objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

퍼트 해봤어?@JsonFormat(pattern="dd/MM/yyyy HH:mm:ss Z")그 전에요?

@JsonProperty("timestamp")
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm")
private OffsetDateTime timestamp;

얻을 수 있을 것 같습니다.

2017-01-30'T'16:55

삭제 중@EnableWebMvc그리고 이제 막 물려받았을 뿐이죠.WebMvcConfigurerAdapterObjectMapper 설정을 덮어쓰지 않도록 지원했습니다.그 때문에, 에 지정되어 있는 설정 속성이application.yml적용됩니다.

언급URL : https://stackoverflow.com/questions/41876037/jackson-date-format-for-offsetdatetime-in-spring-boot

반응형