Облачные конечные точки Google Ошибка HTTP 500 при удалении

Облачные конечные точки Google Ошибка HTTP 500 при удалении

Я создал класс конечной точки Google Cloud, который использует стандартные методы CRUD, включая метод удаления:

public Member removeMember(@Named("id") Long id) {
    PersistenceManager mgr = getPersistenceManager();
    Member member = null;
    try {
        member = mgr.getObjectById(Member.class, id);
        mgr.deletePersistent(member);
    } finally {
        mgr.close();
    }
    return member;
}

Однако, когда я вызываю DELETE, я получаю сообщение об ошибке HTTP 500:

HTTP ERROR 500

Problem accessing /_ah/spi/Members.removeMember. Reason:

com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Cannot read fields from a deleted object (through reference chain: com.mylodge.contracts.masonry.Member[\"degree\"])

Как я могу избежать этой ошибки HTTP 500?

В сторону: мне все равно кажется нелогичным возвращать удаленный объект. Не будет ли HTTP 200 OK более подходящим?

ОБНОВЛЕНИЕ: вместо этого я попытался вернуть null и попытался сделать метод VOID. Но оба они дают HTTP-ответ

500 No content to map to Object due to end of input

person Dewiniaeth    schedule 05.04.2013    source источник


Ответы (1)


Если вам не нужен объект, не возвращайте его. Это самое простое решение здесь. Я собираюсь предложить группе Google Plugin for Eclipse изменить шаблон, чтобы не возвращал удаленный объект по умолчанию.

Если вам нужен удаленный объект, я думаю, вы столкнулись с ленивой загрузкой JDO. Ваше свойство degree загружается во время сериализации. Однако, поскольку базовый объект хранилища данных уже удален, он не может получить к нему доступ. Вам нужно будет явно получить доступ к свойству, прежде чем оно будет удалено.

person Dan Holevoet    schedule 05.04.2013
comment
Если я вместо этого верну null ИЛИ изменю метод на VOID, результирующий ответ HTTP будет 500 Нет содержимого для сопоставления с объектом из-за окончания ввода. Я действительно просто хочу вернуть HTTP 200 - в идеале без содержимого. - person Dewiniaeth; 08.04.2013
comment
Вы восстановили свою клиентскую библиотеку после этого? - person Dan Holevoet; 08.04.2013
comment
Я не использую клиентскую библиотеку — я просто вызываю HTTP-запрос DELETE с помощью Fidder — я просто пишу API на стороне сервера. - person Dewiniaeth; 09.04.2013
comment
Кажется, произошла ошибка на сервере приложений dev. Я вижу 204 No Content в производстве, но та же ошибка, о которой вы сообщаете на сервере приложений для разработчиков. - person Dan Holevoet; 09.04.2013
comment
Это должно быть исправлено в выпуске 1.7.7 (включая предварительный выпуск SDK, доступный сейчас: code.google.com/p/googleappengine/downloads/) - person Dan Holevoet; 09.04.2013
comment
Спасибо за расследование, Дэн. Когда нам ожидать финальный релиз 1.7.7? - person Dewiniaeth; 09.04.2013
comment
Привет, Дэн. Какой номер проблемы указан в списке дефектов на code.google.com/p/? googleappengine/issues/list Я хочу следить за ходом выполнения - person Dewiniaeth; 09.04.2013
comment
Его там нет, так как он был обнаружен и исправлен командой до того, как мы с вами это обнаружили. Я не могу назвать вам точную дату, но я ожидаю, что это произойдет в ближайшее время. :) - person Dan Holevoet; 09.04.2013