0

私は現在Springフレームワークを使用していますが、これが直接問題であるかどうかはわかりません。次のエラーが発生します。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:929) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:824) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:798) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

    @SuppressWarnings({ "rawtypes", "unchecked"})
public List getAllByFilter( String collectionPeriod,String sYear, String submission) {
    // TODO Auto-generated method stub SELECT_QUERY_BY_COLL_MSTR

    List<CollectionCalendar> orgs1 = new ArrayList<CollectionCalendar>();        
    List<Map<String,Object>> rows1 = null;
    String query="SELECT_QUERY_BY_COLL_MSTR";

    if("All".equalsIgnoreCase(sYear) && "All".equalsIgnoreCase(collectionPeriod)){
        query="SELECT_QUERY_BY_COLL_MSTR_SUBMISSION";
         rows1 = getJdbcTemplate().queryForList(p.getProperty(query),new Object[] {submission});
    }else if(!"All".equalsIgnoreCase(sYear) && "All".equalsIgnoreCase(collectionPeriod)){
        query="SELECT_QUERY_BY_COLL_MSTR_SUBMISSION_YEAR";
         rows1 = getJdbcTemplate().queryForList(p.getProperty(query),new Object[] {sYear,submission});
    }else if("All".equalsIgnoreCase(sYear) && !"All".equalsIgnoreCase(collectionPeriod)){
        query="SELECT_QUERY_BY_COLL_MSTR_SUBMISSION_COLLECTION";
         rows1 = getJdbcTemplate().queryForList(p.getProperty(query),new Object[] {collectionPeriod,submission});
    }else if(!"All".equalsIgnoreCase(sYear) && !"All".equalsIgnoreCase(collectionPeriod)){      
         rows1 = getJdbcTemplate().queryForList(p.getProperty(query),new Object[] {sYear,collectionPeriod,submission});
    }
    System.out.println("hellooooooooooooooooooo");
    for (Map row : rows1) {
        System.out.println("row------"+row);
        CollectionCalendar collectionCalendar = new CollectionCalendar(row.get("COLL_KEY").toString(),
                (Date)row.get("COLL_OPEN_DT"),
                (Date)row.get("COLL_CLOSE_DT"),
                (Date)row.get("COLL_AVLBL_DT"),
                row.get("COLL_ACAD_YR").toString(),
                row.get("COLL_NAME").toString(),
                row.get("COLL_DESC").toString(),
                row.get("SUBM_DESC").toString(),
                row.get("UPDATE_USER").toString());
                //(Timestamp) row.get("UPDATE_DTTM"));            
        orgs1.add(collectionCalendar); (COMMENTED THIS OUT BUT STILL GETTING ERROR)
    }
    return orgs1;
}

public CollectionCalendar(String colKey,Date opDate,Date clDate,Date avDate,String sYear,String submission,String collectionPeriod,String subDesc,String updateUser){
    setCollKey(colKey);
    setOpenDate(opDate);
    setCloseDate(clDate);
    setAvailDate(avDate);
    setsYear(sYear);
    setSubmission(submission);
    setCollectionPeriod(collectionPeriod);
    setSubDesc(subDesc);
    setUpdateUser(updateUser);
    //setUpdateTime(updateTime);
}

私が持っているのは、DBにクエリを実行し、結果をテーブルに返す検索フォームです。列タイプがであるOracleDBテーブルからデータをプルしていますDateが、何らかの理由で、値からキャストできないと表示されTimestampます。値を要求しているわけではありませんTimestamp

どんな助けでも大歓迎です。

4

1 に答える 1

3

COLL_OPEN_DT、COLL_CLOSE_DT、およびCOLL_AVLBL_DTの1つまたはすべてがデータベースのタイムスタンプであるように見えます。幸いにもjava.sql.Timestamp拡張しjava.util.Dateます。

オプション1

クラスの日付要素をCollectionCalendarjava.util.Dateに変更します

オプション2

and returns ajava.sql.Timestampjava.sql.Date`をとる方法でクラスを作成します

簡単な例を次に示します。

class Blammy
{
  static final java.sql.Date convertTimestamp(final java.sql.Timestamp timestamp)
  {
    java.sql.Date returnValue;

    if (timestamp != null)
    {
      returnValue = new java.sql.Date(timestamp.getTime());
    }
    else
    {
      returnValue = null; // an exception might be better here.
    }

    return returnValue
  }
}

次に、上記のコードを次のように変更します。

...
Blammy.convertTimestamp(row.get("COLL_OPEN_DT")),
...

オプション3

他の何か(私が考えていなかった)。

于 2013-01-28T18:09:03.370 に答える