programing

Java 8 date/time type 'java.time.Instant'는 기본적으로 지원되지 않습니다. 문제:

powerit 2023. 3. 4. 15:16
반응형

Java 8 date/time type 'java.time.Instant'는 기본적으로 지원되지 않습니다. 문제:

java.time을 이해하는데 어려움을 겪고 있습니다.인스턴트 라이브러리Instant Library를 구현하기 위한 간단한 솔루션 방법이 없는지는 잘 모르겠습니다.저는 MongoDB에서 CRUD 작업을 통해 RESTful 서비스를 만든 스프링 부트 프로젝트를 가지고 있습니다.DTO에서 Instant updated On & Instant created On을 소개하기 전까지는 모든 것이 괜찮았습니다.

장애가 발생하고 있는 POST 응답의 샘플 코드를 다음에 나타냅니다.

  @Override
  public ResponseEntity<ResponseDto> create(@RequestBody CLMDto CLMDto) {

    CLMDto createdCLMDto =
        CLMService.create(CLMDto);

    return ResponseEntity.status(HttpStatus.CREATED)
        .header(
            RESPONSE_HEADER_LOCATION, CLM_URL + "/" + createdCLMDto.getId())
        .body(ResponseDto.builder().value(createdCLMDto).build()); //--------------------->**Failing here**
  }

내 응답 DTO는 다음과 같습니다.


@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class ResponseDto {

  private Integer count;
  private Object value;
  private Object error;
  private Object info;
}

및 CLMDto

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AdminDataDto {
  
  private Instant createdOn;
  private Instant updatedOn;
  @JsonProperty(value = "updatedByName", access = JsonProperty.Access.READ_ONLY)
  private String updatedByName;
}

디버거에서 예외가 발생하는 위치에 CLMDto 변수가 생성되었습니다.

createdOn:Instant@193 "2021-03-27T11:53:24.774765300Z"
updatedByName:test
updatedOn:Instant@195 "2021-03-27T11:53:24.774765300Z"

Lombok 플러그인을 사용하고 있기 때문에 내부에서 디버깅할 수 없고 자동 생성된 코드의 근본 원인을 찾을 수 없습니다.나는 해결책을 찾는 것이 아니라 여기서 일이 잘못될 수 있는 제안을 찾고 있다.나의 정확한 실수는

  Type definition error: [simple type, class java.time.Instant]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Java 8 date/time type `java.time.Instant` not supported by default: add Module \"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\" to enable 
handling (through reference chain: 
com.abc.service.dto.ResponseDto[\"value\"]->com.abc.dto.AdminDataDto[\"createdOn\"])",

말할 필요도 없이, 저는 이미 업데이트된 메이븐 라이브러리에 제공된 솔루션을 시도했지만 성공하지 못했습니다.이 라이브러리에서 StackOverflow에 대해 많은 질문을 찾았지만 아무도 이 라이브러리를 구현하는 가장 쉬운 방법을 설명하지 않았습니다.

pom.xml 의존관계는 이미 팔로우 하고 있습니다.

        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
        </dependency>

여기 제시된 솔루션 Java 8 date time type은 Spring Boot에서 오브젝트로 시리얼화되어 있습니다.

프로젝트에 다음과 같은 아티팩트가 있습니까?

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

스프링 소스 코드에 따르면 클래스가com.fasterxml.jackson.datatype.jsr310.JavaTimeModule클래스 패스에 존재합니다.JavaTimeModule등록해야 합니다.

언급URL : https://stackoverflow.com/questions/66831223/java-8-date-time-type-java-time-instant-not-supported-by-default-issue

반응형