2012-02-02 4 views
2

Работа с REST API с Play Framework.Play Framework: как связать сложный запрос REST с методом контроллера

У меня есть требование о поддержке запроса RESTful, содержащего «заказ» с несколькими «позициями».

С точки зрения «данные POST», я вижу, что нравится: (разделить на нескольких линиях для ясности)

OrderId=123&OrderType=regular& 
ItemNum=1&ItemID=78&quantity=2&discount=20& 
ItemNum=2&ItemID=70&quantity=1& 
ItemNum=3&ItemID=75&quantity=1&discount=10 

Обратите внимание, что у меня есть вопрос, требовать все «позиции», чтобы прийти с полным набором данных. В приведенном выше примере 2-й элемент не имеет скидок. Поскольку я не могу «заставить» разработчиков использовать API для работы с моей собственной «оберткой», я хочу оставить некоторую гибкость.

Я хотел бы, чтобы отобразить его на что-то вроде:

метод (INT OrderId, струнный OrderType, пункт [] элементы)

Однако мне не удалось найти что-то подходящее в документации.

Каков правильный путь? Должен ли я создать собственный парсер данных запроса HTTP? Любой альтернативный способ форматирования данных POST - при условии соблюдения правил REST - также является приемлемым.

Благодаря Макс

ответ

2

Чтобы отобразить массив объектов Pojo, то вам нужно поставить item. перед объектом элемента. Точно так же, как вы сопоставляете объект в форме. Затем вы должны указать, что это массив, использующий синтаксис стандартного массива.

Я хотел бы сделать что-то вроде следующего

orderId=123&orderType=regular& 
item[0].ItemNum=1&item[0].ItemID=78&item[0].quantity=2&item[0].discount=20& 
item[1].ItemNum=2&item[1].ItemID=70&item[1].quantity=1& 
item[2].ItemNum=3&item[2].ItemID=75&item[2].quantity=1&item[2].discount=10 
+0

К сожалению, я не смог заставить его работать. Я пытался определить класс «Предмет» с открытыми членами «int»: ItemNum, ItemID, количество, скидка. Тогда сигнатура метода была (int orderID, String orderType, Item [] items). Каждый раз, когда я вызываю метод через запрос POST, массив «items» имеет значение «null». Что-то пропустило? Любой намек на отладку? Спасибо – Max

+1

это должно быть 'items [0]' not 'item [0]' и т. Д. Если это не удается, вам, возможно, придется создать настраиваемое связующее. – Codemwnci

+0

Получил это, чтобы работать с элементами []! Я ценю вашу помощь! Максимум – Max

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