Java日期接收報錯:could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法
問題背景
使用 Element-UI 的 el-date-picker 組件 將日期轉(zhuǎn)給Java,Java報錯
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實體類
@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; }
當執(zhí)行 toJavaObject
方法時,報錯如下
java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’ could not be parsed, unparsed text found at index 10
修改Java控制層
更改為使用實體類接收參數(shù) @RequestBody AppProjects appProjects
public Object update(@RequestBody AppProjects appProjects) { boolean update = appProjectsService.updateById(appProjects); return update; }
執(zhí)行方法時不報錯,但是日期的值卻比實際少一天,為什么呢?
因為前端實際選擇日期為 ‘2024-01-04’ ,傳值為 ‘2024-01-03T16:00:00.000Z’,該時區(qū)不是東八區(qū),使用實體類接收時去掉了時分秒,導致日期保存為 ‘2024-01-03’
已經(jīng)不報錯了,那么解決日期問題就簡單了!
解決方法
在 el-date-picker組件 使用屬性 value-format="yyyy-MM-dd"
將綁定的格式不指定為 Date 對象,綁定的值會轉(zhuǎn)為 string 對象,那么實際選擇哪一天的日期,就是 yyyy-MM-dd
格式的字符串啦!這樣后端就能正確接收日期了
<el-date-picker v-model="form.removalDate" type="date" value-format="yyyy-MM-dd" placeholder="選擇日期" style="width: 300px" />
補充:java后端接收前端傳遞的日期參數(shù)為空字符串時報錯
一、關于接收前端傳遞的日期參數(shù)的問題:
前提:
Date類型的屬性上添加了以下注解:
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @JSONField(format = "yyyy-MM-dd")
1、java.sql.date:空字符串解析報錯,正常日期格式字符串沒問題;
2、java.util.date:空字符串解析沒問題,正常日期格式字符串用于查詢時報錯;
二、方案:
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用于查詢時格式化為yyyy-MM-dd
3、前端傳遞正確的日期/不傳遞該參數(shù)
總結
到此這篇關于Java日期接收報錯:could not be parsed, unparsed text found at index 10解決辦法的文章就介紹到這了,更多相關Java日期接收報錯could not be parsed內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot 普通類調(diào)用Bean對象的一種方式推薦
這篇文章主要介紹了SpringBoot 普通類調(diào)用Bean對象的一種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11