2011-05-31 77 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