#java #google-app-engine #spring-mvc #exception-handling
#java #google-app-engine #spring-mvc #исключение
Вопрос:
У меня есть 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>
В журналах также отображается то же сообщение журнала с уровнем предупреждения.
Я получаю похожие предупреждающие сообщения (но не критичные) в своих журналах, когда я вызываю другие контроллеры Spring, которые либо отображают веб-страницу (GET), либо возвращают некоторые XML-данные (по сути, RPC вызывает, которые используют HTTP POST). Когда я выполняю HTTP GET / POST для этих URL-адресов, код ответа равен 200, и вывод правильный (и я игнорирую предупреждающее сообщение в журналах).
Это приводит меня к двум вопросам:
- Почему я получаю сообщение о критической ошибке / HTTP 500 для POST из очереди, но не GET / POST для других Spring Controllers в моем приложении?
- Как я могу перехватить исключение и, по существу, отбросить его; что касается моих целей, задача выполнена.
Я могу опубликовать полный журнал исключений, если это полезно; для краткости я его опустил.
Ответ №1:
вы должны сделать свой <some spring class that changes all the time, but does not implement java.io.Serializable>
просто сериализуемым (не только контроллер). Мне, по крайней мере, помогло это.
Комментарии:
1. Я пытался это сделать, но график объектов получился слишком громоздким. Нужно было бы сделать каждый класс в Spring сериализуемым 😉 В конце концов я сдался.