2013-03-16 5 views
3

Как передать более одного объекта от клиента до конечной точки Google?Множественные аргументы сущности в конечных точках Google

Например, передача одиночного объекта легко сделать в исходном апи файле Endpoint на сервере:

public class SomeEndpoint { 
... 
    @ApiMethod(...) 
    public MyEntity someMethod(MyEntity someEntity) { 
    ... 
    } 
... 
} 

то в клиенте я мог бы легко назвать

endpoint.someMethod(someEntity).execute() 

Но что, если Я хочу передать две сущности в конечную точку ?, вот так:

@ApiMethod(...) 
public MyEntity otherMethod(MyEntity someEntity, MyEntity someOtherEntity) { 
    ... 
} 

это не работает, только GPE генерирует библиотеку конечных точек с единственным аргументом MyEntity.

Возможно ли передать несколько аргументов Entity?

Спасибо.

+0

Будет ли это не представляется возможным комбинировать различные поля в двух разъемных субъектов в самом единое целое? В коде сервера вы можете получить единый объект и обработать 2 категории полей по-разному. –

+0

Спасибо @tony. Да, я полагаю, я мог бы создать новый объект, который каким-то образом сочетает их, но я стараюсь избегать этого. Я также хотел бы знать ограничения конечной точки в этом отношении. – aez

ответ

9

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

class MyWrapperEntity { 
    MyEntity someEntity; 
    MyOtherEntity someOtherEntity; 
    // ... 
} 

Однако, это не то, что ваш пример показывает (сущности того же типа). Используйте List<MyEntity> или Map<String, MyEntity> внутри коллекции объекта вместо, например .:

class MyEntityCollection { 
    List<MyEntity> items; 
    // ... 
} 
+0

Спасибо Dan. Я пробовал это, так как я использую два объекта одного типа, и Eclipse разрешил его создавать с использованием списка , но в результате метода в сгенерированном API конечных точек не было никаких аргументов. Он игнорирует список , и он игнорирует что-либо после первого MyEntity, если у вас более одного. – aez

+0

Да, я был неправ. Ответ обновлен. –

+0

Дэн, вы все еще по существу предполагаете, что я создаю объект «обертки» для решения этой проблемы? Если это так, неясно, как я могу создать объект AppEngine, который обертывает несколько объектов. – aez

0

Используйте «под названием» аннотации ...

@ApiMethod(name = "sendStuff") 
public void sendStuff(@Named("clientId") String clientId, @Named("stuff") String stuff) 

И для андроид, клиентский код будет выглядеть следующим образом

SendStuff sl = service.sendStuff(clientId, stuff); 
+0

Спасибо. Да, вы можете сделать это с помощью примитивных типов, таких как String и Long, и т. Д., Но моя проблема заключается в использовании нескольких Entities в качестве аргументов. @Named не будет работать для них. – aez

+0

@Tom, пожалуйста, помогите здесь http://stackoverflow.com/q/42371135/3671509 –

+0

Это даже работает только с запросом на получение. –

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