You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JSP表单获取指定格式的日期并存储到MySQL?

实现JSP表单日期存入MySQL的完整方案

看起来你正在用Spring MVC的表单标签收集日期并存储到MySQL,我来帮你梳理整个流程和容易踩的坑:

1. 先对齐实体类与数据库字段

首先你的Assignment实体类里的date字段,推荐用Java 8+的LocalDate类型(比旧的Date类更简洁,还没时区问题),代码示例:

public class Assignment {
    // 其他字段...
    @DateTimeFormat(pattern = "yyyy-MM-dd") // 对应前端提交的格式,可按需修改
    private LocalDate date;

    // 别忘了加Getter和Setter方法
}

对应的MySQL表中,date字段要设置为DATE类型,SQL示例:

CREATE TABLE assignment (
    id INT PRIMARY KEY AUTO_INCREMENT,
    date DATE NOT NULL,
    -- 其他业务字段...
);

2. 调整JSP表单的日期输入

你当前用了<form:input type="date" pattern="yyyy/MM/dd"/>,这里要注意:HTML5原生的date输入控件,大多数浏览器默认会以yyyy-MM-dd的格式提交数据,你设置的pattern更多是做前端验证用的,不影响提交格式。

如果想用原生控件,建议把表单代码调整成这样:

<form:form id="regForm" modelAttribute="assignment" action="successAddAssignment" method="post">
    <table align="center">
        <tr>
            <td><form:label path="date">Date</form:label></td>
            <td>
                <form:input path="date" type="date" id="date"/>
                <!-- 去掉pattern,让浏览器用默认的yyyy-MM-dd格式提交 -->
                <c:if test="${not empty errors.date}">
                    <span style="color:red;">${errors.date}</span>
                </c:if>
            </td>
        </tr>
        <!-- 其他表单字段 -->
        <tr>
            <td colspan="2"><input type="submit" value="Submit"/></td>
        </tr>
    </table>
</form:form>

如果一定要让前端提交yyyy/MM/dd格式,那得换成普通文本输入框加JS日期选择器,或者在提交前用JS转换格式。

3. 后端Controller的处理逻辑

在Controller里接收提交的Assignment对象,调用DAO层存入数据库即可:

@Controller
public class AssignmentController {

    @Autowired
    private AssignmentService assignmentService;

    // 显示表单的方法
    @GetMapping("/addAssignment")
    public String showAddForm(Model model) {
        model.addAttribute("assignment", new Assignment());
        return "addAssignment"; // 你的JSP页面名称
    }

    // 处理表单提交
    @PostMapping("/successAddAssignment")
    public String handleSubmit(@ModelAttribute("assignment") @Valid Assignment assignment, 
                               BindingResult result, Model model) {
        if (result.hasErrors()) {
            // 如果日期格式不匹配,返回表单页面显示错误
            return "addAssignment";
        }
        // 存入数据库
        assignmentService.saveAssignment(assignment);
        return "success"; // 跳转成功页面
    }
}

4. DAO层的实现(以JdbcTemplate为例)

如果用JdbcTemplate操作数据库,保存方法可以这么写:

@Repository
public class AssignmentDaoImpl implements AssignmentDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void saveAssignment(Assignment assignment) {
        String sql = "INSERT INTO assignment (date) VALUES (?)";
        jdbcTemplate.update(sql, assignment.getDate());
        // LocalDate可以直接作为参数传入,JdbcTemplate会自动转换为MySQL的DATE格式
    }
}

常见问题排查

  • 日期绑定失败,出现类型不匹配错误:确保实体类的date字段上的@DateTimeFormatpattern和前端提交的格式完全一致,比如前端提交yyyy/MM/dd,就把pattern改成这个值。
  • MySQL存储的日期格式不对:MySQL的DATE类型只认yyyy-MM-dd格式,所以不管前端提交什么格式,后端都要先转成这个格式再存入,用LocalDate的话会自动处理,不用手动转换。
  • 前端date控件显示格式不符合预期:浏览器的date控件显示格式是跟着用户系统区域走的,但提交格式始终是yyyy-MM-dd,不用纠结显示样式,后端处理好提交的格式就行。

内容的提问来源于stack exchange,提问作者Agnes Palit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:23:20