Spring MVC 日期绑定 returns 空值

Spring MVC date binding returns null value

我在 class 中创建了一个时间戳成员并将其存储在数据库中。当我尝试更新它的值时变为 null 但能够在 UI.

中看到它的值

我使用 init binder 将字符串转换为日期但它不起作用,请帮助我。

CNTC.java

    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;

    import static javax.persistence.GenerationType.IDENTITY;

    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;

    import org.springframework.format.annotation.DateTimeFormat;

    /**
     * Cntc generated by hbm2java
     */
    @Entity
    @Table(name = "cntc", catalog = "ecable")
    public class Cntc implements java.io.Serializable {

        private Integer cntcId;
        private String mobNo;
        private String altMobNo;
        private String emailId;
        private String crtId;
        private Date crtTs;
        private String updId;
        @DateTimeFormat(pattern="yyyy-mm-dd HH:mm:ss.z")
        private Date updTs;
        private Set<Addr> addrs = new HashSet<Addr>(0);



        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "CNTC_ID", unique = true, nullable = false)
        public Integer getCntcId() {
            return this.cntcId;
        }

        public void setCntcId(Integer cntcId) {
            this.cntcId = cntcId;
        }

        @Column(name = "MOB_NO", nullable = false, length = 500)
        public String getMobNo() {
            return this.mobNo;
        }

        public void setMobNo(String mobNo) {
            this.mobNo = mobNo;
        }

        @Column(name = "ALT_MOB_NO", nullable = false, length = 500)
        public String getAltMobNo() {
            return this.altMobNo;
        }

        public void setAltMobNo(String altMobNo) {
            this.altMobNo = altMobNo;
        }

        @Column(name = "EMAIL_ID", nullable = false, length = 1000)
        public String getEmailId() {
            return this.emailId;
        }

        public void setEmailId(String emailId) {
            this.emailId = emailId;
        }

        @Column(name = "CRT_ID", nullable = false, length = 200)
        public String getCrtId() {
            return this.crtId;
        }

        public void setCrtId(String crtId) {
            this.crtId = crtId;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "CRT_TS", nullable = false, length = 0)
        public Date getCrtTs() {
            return this.crtTs;
        }

        public void setCrtTs(Date crtTs) {
            this.crtTs = crtTs;
        }

        @Column(name = "UPD_ID", length = 200)
        public String getUpdId() {
            return this.updId;
        }

        public void setUpdId(String updId) {
            this.updId = updId;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "UPD_TS", length = 0)
        public Date getUpdTs() {
            return this.updTs;
        }

        public void setUpdTs(Date updTs) {
            this.updTs = updTs;
        }

    }

控制器绑定

    @InitBinder
    public final void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

UI

中显示的日期
2015-02-11 08:35:18.0

这是我在 UI 中可以看到的日期格式,但是当我尝试更新它的值时,它在 spring 数据绑定对象中变为空,请帮助我,在此先感谢。

您使用的格式错误,当您声明 month pattern 时,您应该使用大写的 M,所以它应该是

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

@DateTimeFormat 也会将字符串转换为日期,因此不需要您的 initBinder,您应该删除它。

请注意,该模式必须符合请求中日期的格式,发布的模式符合例如以下格式 "2010-07-04 00:00:00",我提到这个是因为您的活页夹和 @DateTimeFormat不同,你应该设置对应你的请求参数格式