我在 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/