Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法
問題背景
使用 Element-UI 的 el-date-picker 組件 將日期轉(zhuǎn)給Java,Java報(bào)錯(cuò)
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)錯(cuò)如下
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)錯(cuò),但是日期的值卻比實(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)錯(cuò)了,那么解決日期問題就簡(jiǎn)單了!
解決方法
在 el-date-picker組件 使用屬性 value-format="yyyy-MM-dd" 將綁定的格式不指定為 Date 對(duì)象,綁定的值會(huì)轉(zhuǎn)為 string 對(duì)象,那么實(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)錯(cuò)
一、關(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)錯(cuò),正常日期格式字符串沒問題;
2、java.util.date:空字符串解析沒問題,正常日期格式字符串用于查詢時(shí)報(bào)錯(cuò);
二、方案:
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類型的屬性注冊(cè)解析器
binder.registerCustomEditor(Date.class, customDateEditor);
}
2、java.util.date用于查詢時(shí)格式化為yyyy-MM-dd
3、前端傳遞正確的日期/不傳遞該參數(shù)
總結(jié)
到此這篇關(guān)于Java日期接收?qǐng)?bào)錯(cuò):could not be parsed, unparsed text found at index 10解決辦法的文章就介紹到這了,更多相關(guān)Java日期接收?qǐng)?bào)錯(cuò)could not be parsed內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解springMVC之與json數(shù)據(jù)交互方法
本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Java中BeanUtils.copyProperties的11個(gè)坑總結(jié)
我們?nèi)粘i_發(fā)中,經(jīng)常涉及到DO、DTO、VO對(duì)象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties,它會(huì)自動(dòng)通過反射機(jī)制獲取源對(duì)象和目標(biāo)對(duì)象的屬性,pyProperties,會(huì)有好幾個(gè)坑呢,本文將給大家總結(jié)一下遇到的坑,需要的朋友可以參考下2023-05-05
Java實(shí)現(xiàn)微信掃碼授權(quán)登錄完整步驟
微信掃碼登錄是目前非常流行的第三方登錄方式,這篇文章主要介紹了Java實(shí)現(xiàn)微信掃碼授權(quán)登錄的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11

