php エディタ Zimo は、Java が LocalDateTime を逆シリアル化するときの問題の解決策を提供します。逆シリアル化に Jackson ライブラリを使用する場合、特に LocalDateTime 型を処理する場合に、InvalidFormatException 例外が発生することがあります。この記事では、この一般的な逆シリアル化例外を正常に解決できるように、この問題の原因と解決策を詳しく紹介します。
スプリング ブート アプリケーションで localdatetime のデシリアライズに問題があります。以下は関連するコードです。
###フロントエンド:### リーリーバックエンド: lancamento クラス:
リーリーレスモランカメントクラス:
リーリー ###質問:###com.fasterxml.jackson.databind.exc.invalidformatException: 文字列 '10/01/2024' 型の値から逆シリアル化できません
java.time.localdatetime: java.time.localdatetime を逆シリアル化できません: (java.time.format .datetimeparseException) テキスト '10/01/2024' を解析できません: Temporalaccessor から localdatetime を取得できません: {}、iso は java.time.format.parsed 型の 2024-01-10 として解析されます [ソース: (org.springframework.util.streamutils$noncloseinputstream); 行: 1、列: 63] (参照チェーン経由: com.algaworks.algamoney_api.domain.model.lancamento["datavencimento"])
lancamentos の console.log() では、属性「datavencimento」と「datapagamento」の形式は「dd/mm/yyyy」です。
逆シリアル化中に日付形式に問題があると思われます。フロントエンドとバックエンドのコードを更新しても、問題は解決しません。問題はクライアントにあると思いますが、わかりません。
スプリングブートアプリケーションで文字列からlocaldatetimeを逆シリアル化するときにinvalidformatExceptionを修正するにはどうすればよいですか?
localdatetime の正しいシリアル化と逆シリアル化には、特定の構成や調整が必要ですか?
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')); } } }回避策この問題を解決するには、次のいずれかを実行できます:
JSON ペイロードの逆シリアル化形式または日付形式を必ず調整して、正しく配置されていることを確認してください。要件とコーディングの実践に最も適した方法を選択してください。
オプション 3: この問題は、Java の localdatetime に、日付と時刻のコンポーネントを含むパターン "dd/mm/yyyy" に対する直接フォーマッタがないために発生します。日付コンポーネントのみに興味がある場合は、これらのフィールドのタイプを localdate に変更する必要がある場合があります。
リーリー以上がLocalDateTime の逆シリアル化の問題: Jackson InvalidFormatExceptionの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。