java - Spring mvc Time 列接收 null 导致 HttpMessageNotReadableException

标签 java mysql spring hibernate spring-mvc

我在 mysql 数据库上使用 spring mvc 和 hibernate。
在其中一个表中,有一列 EndTime,类型为 time,该列可能为 null。

我将其映射到类型为 java.sql.Time 的 java 类。

从表中获取数据进展顺利,但是当我尝试在此特定列中添加具有空值的行时,它失败并出现以下错误:

...
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "Could not read JSON: Instantiation of [simple type, class java.sql.Time] value failed: null (through reference chain: mediamatrix.models.playlists.MediaAd[\"endTime\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class java.sql.Time] value failed: null (through reference chain: mediamatrix.models.playlists.MediaAd[\"endTime\"])",
...

对于从客户端使用此有效负载:

{"a":10100,"b":4667,...,"endTime":""}

如果我向 endTime 属性添加值,它执行时不会出现问题。

有人知道为什么会发生这种情况吗?尝试在类的 setter 方法中检查 null,但它甚至没有调用它,只是产生错误。

谢谢。

PS。 相关代码片段:

表映射类: 导入 org.hibernate.annotations.Type;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;

@Entity
@Table(name = "atable")
public class ATable {

    @Column(name = "a")
    int a;

    @Id
    @Column(name = "b")
    int b;

    ...

    @Column(name = "EndTime")
    Time EndTime;

    ...

    public Time getEndTime() {
        return EndTime;
    }

    public void setEndTime(Time endTime) {
//        if (endTime != null) {
        EndTime = endTime;
//        }
    }
}

Controller :

@RequestMapping(value = "/addATableItem", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> AddATableItem(@RequestBody ATable aItem) {
        return _session.addATableItem(aItem);
}

hibernate 处理:

public Map<String, Object> addATableItem(ATable atable) {
        Map<String, Object> res = new HashMap<>();
        try {
            this.getSession().createSQLQuery("INSERT INTO atable (... EndTime) VALUES (... :EndTime)")
                    ...
                    .setParameter("EndTime", atable.getEndTime()).executeUpdate();
            res.put("status", 1);
            res.put("message", "success");
        } catch (Exception e) {
            res.put("status", 0);
            res.put("message", "failure");
        }
        return res;
}

最佳答案

好吧,我发现了问题所在,请注意,在我发送的有效负载中,endTime 值等于空字符串而不是 null,当我将其更改为 null 时,spring 接受了它!

关于java - Spring mvc Time 列接收 null 导致 HttpMessageNotReadableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40952957/

相关文章:

java - JQuery AutoComplete 与 Spring MVC 返回列表,但未过滤

java - 返回按钮无意中退出应用程序

php - 如何正确对 mysql 表进行分组/排序

mysql - SQL中的单行UPDATE查询需要3秒以上

Spring Boot 社交登录和本地 OAuth2-Server

java - Spring:@DateTimeFormat 在嵌套对象中被忽略

java - java中如何基于 ','作为分隔符分割字符串

java - do-while 循环在回答 no 时不会终止

java - SimpleJpaRepository 不修改持久化实体

php - 将方法的 "Count of Columns"链接到单个查询生成器