Java日期接收報(bào)錯:could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法
問題背景
使用 Element-UI 的 el-date-picker 組件 將日期轉(zhuǎn)給Java,Java報(bào)錯
java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’ could not be parsed, unparsed text found at index 10
代碼
Vue
<el-date-picker v-model="form.removalDate" type="date" placeholder="選擇日期" style="width: 300px" />
Java實(shí)體類
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class AppProjects implements Serializable {
@TableField(updateStrategy = FieldStrategy.IGNORED)
@JsonFormat(pattern = "yyyy-MM-dd")
private Date removalDate;
}
Java控制層
import com.alibaba.fastjson.JSONObject;
public Object update(@RequestBody JSONObject object) {
AppProjects appProjects = object.toJavaObject(AppProjects.class);
boolean update = appProjectsService.updateById(appProjects);
return update;
}
當(dāng)執(zhí)行 toJavaObject 方法時(shí),報(bào)錯如下
java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’ could not be parsed, unparsed text found at index 10
修改Java控制層
更改為使用實(shí)體類接收參數(shù) @RequestBody AppProjects appProjects
public Object update(@RequestBody AppProjects appProjects) {
boolean update = appProjectsService.updateById(appProjects);
return update;
}
執(zhí)行方法時(shí)不報(bào)錯,但是日期的值卻比實(shí)際少一天,為什么呢?
因?yàn)榍岸藢?shí)際選擇日期為 ‘2024-01-04’ ,傳值為 ‘2024-01-03T16:00:00.000Z’,該時(shí)區(qū)不是東八區(qū),使用實(shí)體類接收時(shí)去掉了時(shí)分秒,導(dǎo)致日期保存為 ‘2024-01-03’
已經(jīng)不報(bào)錯了,那么解決日期問題就簡單了!
解決方法
在 el-date-picker組件 使用屬性 value-format="yyyy-MM-dd" 將綁定的格式不指定為 Date 對象,綁定的值會轉(zhuǎn)為 string 對象,那么實(shí)際選擇哪一天的日期,就是 yyyy-MM-dd 格式的字符串啦!這樣后端就能正確接收日期了
<el-date-picker v-model="form.removalDate" type="date" value-format="yyyy-MM-dd" placeholder="選擇日期" style="width: 300px" />
補(bǔ)充:java后端接收前端傳遞的日期參數(shù)為空字符串時(shí)報(bào)錯
一、關(guān)于接收前端傳遞的日期參數(shù)的問題:
前提:
Date類型的屬性上添加了以下注解:
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @JSONField(format = "yyyy-MM-dd")
1、java.sql.date:空字符串解析報(bào)錯,正常日期格式字符串沒問題;
2、java.util.date:空字符串解析沒問題,正常日期格式字符串用于查詢時(shí)報(bào)錯;
二、方案:
1、Controller層添加以下方法,自定義解析參數(shù)(只在該Controller層生效)
@InitBinder
public void initBinder(WebDataBinder binder){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// spring提供的日期解析器(格式化,是否允許為空)選擇true則將空字符串解析為null
CustomDateEditor customDateEditor = new CustomDateEditor(simpleDateFormat, true);
// 為Date類型的屬性注冊解析器
binder.registerCustomEditor(Date.class, customDateEditor);
}
2、java.util.date用于查詢時(shí)格式化為yyyy-MM-dd
3、前端傳遞正確的日期/不傳遞該參數(shù)
總結(jié)
到此這篇關(guān)于Java日期接收報(bào)錯:could not be parsed, unparsed text found at index 10解決辦法的文章就介紹到這了,更多相關(guān)Java日期接收報(bào)錯could not be parsed內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis常用分頁插件實(shí)現(xiàn)快速分頁處理技巧
這篇文章主要介紹了Mybatis常用分頁插件實(shí)現(xiàn)快速分頁處理的方法。非常不錯具有參考借鑒價(jià)值,感興趣的朋友一起看看2016-10-10
Java FTPClient連接池的實(shí)現(xiàn)
這篇文章主要介紹了Java FTPClient連接池的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
Spring Bean三級緩存機(jī)制的技術(shù)指南
在 Spring 框架中,Bean 的創(chuàng)建和管理是容器的核心功能之一,了提高性能,Spring 采用了多級緩存機(jī)制來減少不必要的對象創(chuàng)建和配置,本文將詳細(xì)介紹 Spring 中 Bean 三級緩存的實(shí)現(xiàn)原理,并通過代碼示例幫助你理解這個(gè)機(jī)制的工作方式,需要的朋友可以參考下2025-04-04
springboot config 攔截器使用方法實(shí)例詳解
本文介紹Spring-Boot中使用攔截器的相關(guān)知識,非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
SpringBoot 普通類調(diào)用Bean對象的一種方式推薦
這篇文章主要介紹了SpringBoot 普通類調(diào)用Bean對象的一種方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
詳解springboot項(xiàng)目啟動時(shí)如何排除用不到的bean
使用springboot開發(fā)項(xiàng)目,我們有時(shí)候會排除一些項(xiàng)目里面用不到的bean,不然的話項(xiàng)目啟動會報(bào)錯,這種情況通常是發(fā)生在什么場景里呢,以及如何解決呢,今天咱們就聊一聊2024-01-01
Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Spring?MVC各種參數(shù)進(jìn)行封裝的相關(guān)資料,SpringMVC內(nèi)置多種數(shù)據(jù)類型轉(zhuǎn)換器,可以根據(jù)請求中的參數(shù)與后端控制器方法的參數(shù)的關(guān)系為我們實(shí)現(xiàn)簡單的數(shù)據(jù)封裝,需要的朋友可以參考下2023-06-06

