Java 如何处理从HTML收集的数据并保存在MongoDB中

Java 如何处理从HTML收集的数据并保存在MongoDB中,java,spring,mongodb,date,date-formatting,Java,Spring,Mongodb,Date,Date Formatting,试图处理从HTML表单中收集的日期,我快发疯了。我使用Spring4作为后端,使用Mongodb作为持久性 我的问题是如何在Mongo中显示日期。我想得到以下格式:dd-MM-yyy。我想我知道Mongo使用ISO格式作为默认yyyy-MM-dd'T'HH:MM:ssZ,但当我尝试插入新文档时,在填写表单后,日期会保存为数字值,因此我的问题是: 为什么会这样? 是否可以以dd-MM-yyyy格式保存日期,并保留日期类型的出生日期? 如果不是,如何以标准ISO格式保存日期? Customer类I更

试图处理从HTML表单中收集的日期,我快发疯了。我使用Spring4作为后端,使用Mongodb作为持久性

我的问题是如何在Mongo中显示日期。我想得到以下格式:dd-MM-yyy。我想我知道Mongo使用ISO格式作为默认yyyy-MM-dd'T'HH:MM:ssZ,但当我尝试插入新文档时,在填写表单后,日期会保存为数字值,因此我的问题是:

为什么会这样? 是否可以以dd-MM-yyyy格式保存日期,并保留日期类型的出生日期? 如果不是,如何以标准ISO格式保存日期? Customer类I更改了setter方法以解析表单绑定的日期

@Document
public class Customer implements UserDetails {
    private static final long serialVersionUID = 1L;
    private String firstName;
    private String lastName;
    private Date dateOfBirth;
    private String username;
    private String email;
    private String password;
    private String role;

    public Customer() { }

    public Customer(String firstName, String lastName, Date dateOfBirth, String username,
            String email, String password, String role) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.dateOfBirth = dateOfBirth;
        this.username = username;
        this.email = email;
        this.password = password;
        this.role = role;
    }

    //getters, setters, etc.

    public Date getDateOfBirth() {
        return this.dateOfBirth;
    }

    public void setDateOfBirth(String dateOfBirth) {
        try {
            this.dateOfBirth = new SimpleDateFormat("dd-MM-yyyy").parse(dateOfBirth);
        } 
        catch (ParseException e) {
            //...
        }
    }
}
registration.html

使用/registration值映射的控制器使用DAO插入新客户

结果是:


谢谢你的建议。

在我看来没有问题,但你需要一些解释

为什么会这样

您看到的值仍然是一个日期,它只是在您使用的查看器中以长等效形式显示

通过Mongo shell检查同一文档,您应该可以看到ISO格式的日期,但在内部它是以长值保存的

可以将日期保存为dd-MM-yyy格式,并保留出生日期 日期类型

dd-MM-yyyy是日期格式,如果要存储,必须将日期类型更改为字符串。不推荐

如果不是,如何以标准ISO格式保存日期


您不使用任何格式保存日期。它的内部表示是一个长值。第一点应该回答有关格式部分的问题。

我试图在视图中显示数据库中保存的日期值,但日期、月份和年份不匹配。例如,如果我插入19 06 1990,则显示的值为Fri Nov 10 00:00:00 CET 24。我哪里错了?我不知道哪里错了。首先,您是否看到db中的正确值?似乎前端的值不正确。能否在setDateOfBirth方法中添加调试点并验证所看到的值?已修复!我使用了错误的SimpleDataFormat。正确的是yyyy-MM-dd。再次感谢!
<div class="form">
    <h2>Registration</h2>
    <form th:action="@{/registration}" method="POST"
        th:object="${customer}">
        <input type="text" placeholder="Nome" name="firstName"
            th:field="*{firstName}" /> <input type="text" placeholder="Cognome"
            name="lastName" th:field="*{lastName}" /> <input type="date"
            name="dateOfBirth" th:field="*{dateOfBirth}" /> <input type="text"
            placeholder="Username" name="username" th:field="*{username}" /> <input
            type="email" placeholder="Email" name="email" th:field="*{email}" />
        <input type="password" placeholder="Password" name="password"
            th:field="*{password}" />
        <button type="submit">Submit</button>
    </form>
</div>