2016-12-03 9 views
0

私は、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; 
} 
+0

Springはjava.sql.TimeをJSonに変換する方法を知らない。自分でStringに変換するか、代わりに通常のjava.util.Dateを使用することができます。 –

+0

@GuillaumeF。 Dateオブジェクトを使用しようとしましたが、json(HH:mm:ss、たとえば13:00:00)の時刻形式は認識されません。 これはエラーメッセージです: "...文字列値'13:00:00 ':有効な表現ではありません..."からjava.sql.Dateのインスタンスを構築できません。 また、Timeオブジェクトが機能し、フィールドがnullの場合にのみ問題が発生します。 – Nadav96

答えて

0

まあ、私は問題は私が送信されたペイロードにendTimeは値が空の文字列と同じであることに注意して、だったものを見つけnullではなく、nullに変更したときに春がそれを受け入れました!

関連する問題