Spring Boot中如何将空日期字段存储为null到数据库
问题根因
你当前代码直接调用SimpleDateFormat.parse()方法处理日期参数,当用户未填写对应日期字段时,前端传入空字符串""或null,parse方法无法识别这类值,就会抛出ParseException异常。
解决方法
第一步:封装日期解析工具方法
先写一个通用的日期转换方法,对空值、空字符串做前置判断,合法的日期字符串才做解析,否则直接返回null:
private Date parseDate(String dateStr, SimpleDateFormat sdf) { if (dateStr == null || dateStr.trim().isEmpty()) { // 空值直接返回null,对应数据库存储null即可 return null; } try { return sdf.parse(dateStr); } catch (ParseException e) { // 格式非法也返回null,也可根据业务需求抛自定义异常 e.printStackTrace(); return null; } }
注意SimpleDateFormat是线程不安全的,不要把它声明为类的静态成员变量,保持你当前在方法内初始化的写法即可。
第二步:替换原有代码里的日期解析逻辑
把原来直接调用sdf.parse()的代码全部替换成调用上面的工具方法,示例如下:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 替换原有解析逻辑 Date d1 = parseDate(applicationdate, sdf); user.setApplicationdate(d1); Date d2 = parseDate(expirydate, sdf); user.setExpirydate(d2); Date d3 = parseDate(availabilitydate, sdf); user.setAvailabilitydate(d3); Date d4 = parseDate(oldworkdatefrom, sdf); user.setOldworkdatefrom(d4); Date d5 = parseDate(oldworkdateto, sdf); user.setOldworkdateto(d5); Date d6 = parseDate(dob, sdf); user.setDob(d6);
这样处理后,空的日期参数就会自动转为null存入数据库,符合你的需求。
额外优化建议
- 你当前接收参数用了大量
@RequestParam,后续可以封装成DTO对象,配合Spring的@DateTimeFormat注解自动完成字符串到日期的转换,不需要手动写解析逻辑,代码会更简洁。 - 如果你的项目使用Java 8及以上版本,建议用线程安全的
DateTimeFormatter搭配LocalDate替代旧的DateAPI,稳定性更高。
内容的提问来源于stack exchange,提问作者Rakhi
相关产品推荐
相关产品推荐

