2014-02-04 4 views
1

Я просто создаю небольшие серверные службы конечной точки и отлично работаю на локальном хосте. Но когда приложение развертывается в GAE, у меня возникает внутренняя ошибка сервера:Ошибка конечной точки GAE 500 при развертывании

Я редактирую мой класс как можно более простой, но не имеет никакого значения. Вот мой код:

@Api(name = "meetApp", version = "v1") 
public class RegisteredUsers { 

    @ApiMethod(name = "users.list", httpMethod = "get") 
    public String[] getRegisteredUsers(){ 
      return new String [] {"test"}; 
     } 

Вот сообщение об ошибке на консоли администратора, запрос помечается как ладно (200).

enter image description here

+0

@DanHolevoet Вы могли бы разъяснить нижеследующее? – willlma

+0

Возможный дубликат [500 Внутренняя ошибка сервера на одном из методов моей облачной конечной точки при развертывании] (http://stackoverflow.com/questions/18952299/500-internal-server-error-on-one-of-my-cloud- endpoint-methods-when-deployed) – willlma

ответ

2

Вы не можете вернуть примитивы или любой сбор/массив примитивов, и в то же SDK еще не был обновлен, чтобы помешать вам строить свое приложение или тестирования на месте, когда это делать. Вам нужно создать POJO:

public class MyArray() { 
    private String[] strings; 
    public MyArray(String[] strings) { 
    this.strings = strings; 
    } 
} 

Тогда ваш метод становится

public MyArray getRegisteredUsers(){ 
    return new MyArray(new String[]{'test'}); 
} 

Тогда, где бы вы получаете объект, вы должны получить доступ к String в myArray.strings[0].

Глупо, я знаю. См. my question here для более подробной информации. Вы увидите в комментариях к ответу, что @DanHolevoet (который работает над Cloud Endpoints и не успел отредактировать ваш вопрос, но не ответил на него) подтвердил, что вы не можете возвращать коллекции примитивов.

Я не знаю, почему это так, честно говоря. В ответ на this same question I asked 4 months ago @JoSo заявляет

That actually makes sense when you think about how appengine should go about and serialize that stuff to json.

Я не осведомлен по этому вопросу, но я не согласен. Насколько я понимаю, массивы JavaScript такие же, как и объекты, просто с перечислением вместо именованных атрибутов, поэтому массив строк должен быть легко сериализован и интерпретирован. Если местный devserver может это сделать ...

Я прекращу разглагольствовать. Я уверен, что есть веская причина не допускать этого. Но было бы интересно узнать, что это такое, потому что это было бы чертовски полезно.

Редактировать: улучшенный код

+0

Я просто делал проход через вещи. :) Ваш ответ правильный. –

+0

@DanHolevoet Спасибо, и извините, что вызвал вас. Мне было интересно узнать, почему CE не может вернуть массивы примитивов. – willlma

Смежные вопросы