2011-05-31 76 views
2

我有一個Spring控制器正在通過來自GAE隊列調度器的HTTP POST進行調用。NotSerializableException轉義Spring Controller並導致Google App Engine隊列出現問題隊列

@Controller 
@RequestMapping(value = RSSPoller.RSS_POLLER_URL) 
public class RSSPoller implements Serializable { 
    private static final long serialVersionUID = -4925178778477404709L; 

    public static final String RSS_POLLER_URL = "/rsspoller"; 

    @RequestMapping(method = RequestMethod.POST) 
    @ResponseStatus(HttpStatus.OK) 
    public void pollAndProcessRssFeed() throws ServiceException { 
    try { 
     // do some stuff 
    } 
    catch(Exception e) { 
     throw new ServiceException("Can't process RSS feed because", e); 
    } 
    } 
} 

然而,當它被調用時,響應代碼是500的

Uncaught exception from servlet 
java.lang.RuntimeException: java.io.NotSerializableException: <some spring class that changes all the time, but does not implement java.io.Serializable> 

一個臨界日誌消息相同的日誌信息顯示出來在日誌用警告水平以及。

當我調用其他呈現網頁(GET)的Spring控制器或返回一些XML數據(本質上RPC調用使用HTTP POST)時,我在日誌中獲得類似的警告消息(但不是關鍵的)。當我對這些URL執行HTTP GET/POST時,響應代碼爲200,輸出正確(我忽略了日誌中的警告消息)。

這使我兩個問題:

  1. 爲什麼我得到了POST從隊列中嚴重錯誤消息/ HTTP 500,而不是GET/POST在我的應用程序等春季控制器?
  2. 如何捕獲異常並基本丟棄它;至於我的目的,這項任務已經完成。

我可以發佈完整的例外日誌,如果它是使用;爲簡潔起見,我省略了它。

回答

0

你應該使你的<some spring class that changes all the time, but does not implement java.io.Serializable>只是可串行化(不僅是控制器)。我至少幫了它。

+0

我確實試圖做到這一點,但對象圖繪製太笨拙。一個人將不得不使每個類在Spring Serializable中;)我最終放棄了。 – kierans 2013-07-17 04:07:24