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"입니다.
역직렬화 중에 날짜 형식 문제가 있는 것 같습니다. 프런트엔드 및 백엔드 코드를 업데이트했는데도 문제가 지속됩니다. 문제는 고객에게 있는 것 같은데 잘 모르겠습니다.
어떤 안내나 제안이라도 주시면 감사하겠습니다. 감사해요!
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!