私は、mysqlデータベースにhibernateを持つspring mvcを使用しています。
時間のEndTimeのいずれかの表に、nullの可能性があります。Spring mvc NULLを受け取る時間列HttpMessageNotReadableException
タイプ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プロパティに値を追加すると、問題なく実行されます。
これはなぜ起こっているのですか?クラスのセッターメソッドでnullをチェックしようとしましたが、それを呼び出すことはなく、ただエラーを生成します。
ありがとうございました。
PS。 コードの関連するスニペット:
テーブルマッピングクラス: import 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;
// }
}
}
コントローラー:
@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;
}
Springはjava.sql.TimeをJSonに変換する方法を知らない。自分でStringに変換するか、代わりに通常のjava.util.Dateを使用することができます。 –
@GuillaumeF。 Dateオブジェクトを使用しようとしましたが、json(HH:mm:ss、たとえば13:00:00)の時刻形式は認識されません。 これはエラーメッセージです: "...文字列値'13:00:00 ':有効な表現ではありません..."からjava.sql.Dateのインスタンスを構築できません。 また、Timeオブジェクトが機能し、フィールドがnullの場合にのみ問題が発生します。 – Nadav96