2012-01-12 49 views
3

我使用JSON如何java.util.Date映射到ibatis的MySql的日期,當我需要輸入通過JSON

{"dateOfBirth":"1973-08-26"} 

該字段存在於Person.java類以出生日期爲輸入

import java.util.Date; 

public class Person { 

    Date dateOfBirth; 

    //Some other fields 

    public void setDateOfBirth(Date dateOfBirth) { 

     this.dateOfBirth = dateOfBirth; 
     } 

    public Date getDateOfBirth() { 

     return dateOfBirth; 
     } 
    } 

這被映射到人表中的MySQL數據庫。 我像查詢數據庫:

entityId = (Long) session.selectOne("ValidatePerson", registerUserRequestParams); 

以下是條目我在mapper.xml想提出

<select id="ValidatePerson" parameterMap="ValidatePersonMap" resultType="long"> 
    select person.entityId 
    from person 
    where 
       //Some other Validation checks 
     <if test="dateOfBirth != null"> 
     and person.dateOfBirth = #{dateOfBirth} 
     </if> 
     ); 
</select> 

我有一個prameter地圖作爲

<parameterMap id="ValidatePersonMap" type="java.util.HashMap"> 
    <parameter property="dateOfBirth" javaType="java.util.Date" jdbcType="DATE" mode="IN"/> 
</parameterMap> 

我不是能夠得到database.It的任何結果不會選擇任何行,即使價值exists.I已經檢查了讓利驗證檢查失敗了。如果我在JSON中將dateOfBirth傳遞爲null,那麼我會得到結果。

我也寫成如下測試用例和設置請求:

Date dob = new Date(73,7,26); 
request.setDateOfBirth(dob); 

當我從測試用例將值作爲上面提到我從數據庫中獲取的結果。 只有當我使用json獲取請求參數時纔會出現問題。

  • 的JSON格式,並存儲在數據庫的格式相同
  • 一個解決我必須爲java.util.Date的手動轉換爲字符串在上面的格式,並把它作爲字符串。但這是非常糟糕的方法,客戶不會喜歡它。
+0

閱讀此http:/ /stackoverflow.com/a/2306051/579580 – aviad 2012-02-09 06:37:07

回答

0

您是否嘗試過格式化的Java日期。也許格式是不同的,所以它不能匹配JSON和你的數據庫中存儲的?

+0

格式是JSON和DB一樣...這個JSON使用GSON庫生產...... – 2012-01-13 06:44:09

0

這爲我工作:

MySQL的屬性類型爲Timestamp 我格式化爲JSON日期在Java中是這樣的:

Date d = new Date(); 
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd"); 
String sd = sdf.format(d); 
java.text.SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("HH:MM:ss"); 
String fakeit =sd+"T"+sdf2.format(d); 

然後我用fakeit