У меня есть Spring Controller, который вызывается через HTTP POST из планировщика очереди GAE.
@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>
Такое же сообщение журнала отображается в журналах с уровнем Warning .
Я получаю подобные предупреждающие сообщения (но не критичные) в своих журналах, когда я вызываю другие Spring Controllers, которые либо визуализируют веб-страницу (GET), либо возвращают некоторые данные XML (по сути, RPC вызывает, которые используют HTTP POST). Когда я выполняю HTTP-запрос GET / POST к этим URL-адресам, код ответа равен 200, и результат выводится правильно (и я игнорирую предупреждающее сообщение в журналах).
Это приводит меня к двум вопросам:
- Почему я получаю сообщение Критическая ошибка / HTTP 500 для POST из очереди, но не GET / POST для других Spring Controllers в моем приложении?
- Как я могу перехватить исключение и, по сути, отказаться от него; что касается моих целей, то задача выполнена.
Я могу опубликовать полный журнал исключений, если он полезен; для краткости я его опустил.