如何解决NotSerializableException逃避了Spring Controller并导致Google App Engine队列出现问题
| 我有一个Spring Controller,它是通过GAE Queue Scheduler中的HTTP POST调用的。@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,其中Critical log消息为
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)或返回一些XML数据(实质上是使用HTTP POST的RPC调用)的Spring Controller时,在日志中会收到类似的警告消息(但不是严重的)。当我对这些URL执行HTTP GET / POST时,响应代码为200,输出正确(并且我忽略了日志中的警告消息)。
这使我想到两个问题:
为什么我要从队列中获取POST的严重错误消息/ HTTP 500,而不是从我的应用程序中获取到其他Spring Controller的GET / POST?
我如何捕获异常并从本质上将其丢弃;就我的目的而言,任务已经完成。
我可以发布完整的异常日志(如果有);为了简洁起见,我省略了它。
解决方法
您应该使您的“ 2”仅可序列化(不仅是控制器)。我至少帮助了它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。