목차
질문 내용
해결 방법
Java LocalDateTime 역직렬화 문제: Jackson InvalidFormatException

LocalDateTime 역직렬화 문제: Jackson InvalidFormatException

Feb 22, 2024 pm 01:58 PM

PHP 편집자 Zimo는 Java가 LocalDateTime을 역직렬화할 때 문제에 대한 솔루션을 제공합니다. 역직렬화를 위해 Jackson 라이브러리를 사용할 때 특히 LocalDateTime 유형을 처리할 때 InvalidFormatException 예외가 발생하는 경우가 있습니다. 이 문서에서는 이 일반적인 역직렬화 예외를 성공적으로 해결하는 데 도움이 되도록 이 문제의 원인과 해결 방법을 자세히 소개합니다.

질문 내용

스프링 부트 애플리케이션에서 localdatetime을 역직렬화하는 데 문제가 있습니다. 아래는 관련 코드입니다.

프런트엔드:

으아악

백엔드: lancamento 클래스:

으아악

resumolancamento 카테고리:

으아악

질문:

com.fasterxml.jackson.databind.exc.invalidformatException: 문자열 "10/01/2024"에서 역직렬화할 수 없습니다. java.time.localdatetime 유형의 값: java.time.localdatetime을 역직렬화할 수 없습니다: (java.time.format .datetimeparseexception) 구문 분석 텍스트 "10/01/2024": temporaryaccessor: {}에서 localdatetime을 가져올 수 없습니다. iso는 java.time.format.parsed 유형의 2024-01-10으로 구문 분석되었습니다. [출처: (org.springframework.util.streamutils$nonclosinginputstream); 줄: 1, 열: 63] (참조 체인을 통해: com.algaworks.algamoney_api.domain.model.lancamento["datavencimento"])

lancamentos의 console.log()에서 "datavencimento" 및 "datapagamento" 속성의 형식은 "dd/mm/yyyy"입니다.

역직렬화 중에 날짜 형식 문제가 있는 것 같습니다. 프런트엔드 및 백엔드 코드를 업데이트했는데도 문제가 지속됩니다. 문제는 고객에게 있는 것 같은데 잘 모르겠습니다.

  1. 스프링 부트 애플리케이션에서 문자열에서 localdatetime을 역직렬화할 때 잘못된 형식 예외를 수정하는 방법은 무엇입니까?
  2. 올바른 localdatetime 직렬화 및 역직렬화에는 특정 구성이나 조정이 필요합니까?

어떤 안내나 제안이라도 주시면 감사하겠습니다. 감사해요!

dataconverter() 메소드로 모든 작업을 수행했지만 여전히 성공하지 못했습니다.

update(lancamento: lancamento): promise<lancamento> {
      const headers = new httpheaders()
        .set('authorization', this.chave)
        .set('content-type', 'application/json');

        this.conversordedata([lancamento]);

        return firstvaluefrom(this.http.put<any>(`${this.url}/${lancamento.codigo}`,
      lancamento, { headers }));
    }

    findbycode(codigo: number): promise<lancamento> {
      const headers = new httpheaders()
        .set('authorization', this.chave);

      return this.http.get(`${this.url}/${codigo}`,
        { headers })
        .topromise()
        .then((response: any) => {
          const lancamento = response as lancamento;

          this.conversordedata([lancamento]);

          return lancamento;
        })
        .catch((error: any) => {
          console.error('erro ao buscar lançamento por código: ', error);
          throw error;
        });
    }

//se os atributos forem do tipo date
conversordedata(lancamentos: lancamento[]){
  for(const lancamento of lancamentos){
    if(lancamento.datavencimento && isvalid(lancamento.datavencimento)){
      lancamento.datavencimento = new date(format(lancamento.datavencimento, 'dd/mm/yyyy'));
    }
    if(lancamento.datapagamento && isvalid(lancamento.datapagamento)){
      lancamento.datapagamento = new date(format(lancamento.datapagamento, 'dd/mm/yyyy'));
    }

  }
}
로그인 후 복사

해결 방법

이 문제를 해결하려면 다음 중 하나를 수행할 수 있습니다.

옵션 1: json 날짜 형식 조정 "yyyy-mm-ddthh:mm:ss" 패턴이나 localdatetime과 직접 호환되는 형식과 일치하도록 json 페이로드의 날짜 형식을 변경합니다. 예:

으아악

옵션 2: @jsondeserialize를 사용하여 사용자 지정 역직렬화 형식 지정 lancamento 클래스의 localdatetime 필드에 @jsondeserialize 주석을 달아 사용자 정의 역직렬화 형식을 지정할 수 있습니다. 예:

으아악

json 페이로드에서 역직렬화 형식이나 날짜 형식을 조정하여 올바르게 정렬되도록 해야 합니다. 요구 사항과 코딩 방식에 가장 적합한 방법을 선택하세요.

옵션 3: 이 문제는 Java의 localdatetime에 날짜 및 시간 구성 요소가 포함된 "dd/mm/yyyy" 패턴에 대한 직접적인 포맷터가 없기 때문에 발생합니다. 날짜 구성 요소에만 관심이 있는 경우 이러한 필드의 유형을 localdate로 변경해야 할 수도 있습니다.

으아악

위 내용은 LocalDateTime 역직렬화 문제: Jackson InvalidFormatException의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)