У меня есть следующий метод Java REST я реализован с использованием Джерси:Массива в QueryParam не обрабатывается в POST
@POST
@Path("copy")
public List<Integer> copyCompanionTextRule(@QueryParam("ruleid") List<Integer> ruleIdList,
@QueryParam("workgroupid") List<WorkgroupId> workgroupIds,
@Context HttpHeaders hh)
throws ETMSException
{
List<Integer> insertedItems = new ArrayList<Integer>();
if (null != ruleIdList){
for(Integer ruleId : ruleIdList) {
insertedItems.addAll(copyCompanionTextRule(ruleId, workgroupIds));
}
}
return insertedItems;
}
Он получает список целых и список объектов типа WorkgroupId, а также контекст для некоторой дополнительной обработки я сделаю позже.
Я работаю клиент с Сенча ExtJS 4.2, и мой запрос выполняется следующим образом:
Ext.Ajax.request({
url: '/sysadmin/companiontextrules/copy',
method: 'POST',
showException: true,
scope: this,
params: {
ruleid: Ext.encode(ruleIdsArray),
workgroupid: toWorkgroups
},
callback: function(options, success, response) {
me.setLoading(false);
if (!success) {
return;
}
this.destroy();
}
});
ruleIdsArray просто массив целых чисел: [1274,1292,1745]. ToWorkgroups - это массив объектов, который имеет модель, связанную с объектом WorkgroupId.
Как вы можете видеть, оба списка обрабатываются как параметры запроса, и я использую конфигурацию «params» в запросе Ajax; однако это не работает.
Кажется, что ruleId массив пуст, когда он пытается итерации rulesIdList пуст, поэтому метод POST работает, но он всегда возвращает пустой список.
Я знаю, что не могу использовать их в форме «url? Ruleid = a & workgroupid = b». Когда я попробовал это просто любопытством, у меня возникло QueryParamException и NumberFormatException, говорящее, что массив правил рассматривается как строка.
Когда я использую «Ext.encode» для обоих параметров, я получаю сообщение в консоли браузера о превышении максимального размера столбика.
Это то, что я получил от Chrome консоли:
Я попробовал почти все, но, возможно, еще несколько глаз может помочь мне в этом, я действительно ценю комментарии или любого рода Помогите.
Заранее спасибо.
Я думал, что ExtJS имеет некоторый механизм уплотнительной Params ручки запроса через "Params" конфигурацию. Я взглянул на некоторый код в приложении и понял, что конфигурация «params» используется некоторыми разработчиками, когда метод GET. Для POST я сделал это так, как вы предложили, и работал нормально. Массив может быть большим, поэтому мне, вероятно, потребуется запросить другой способ справиться с этим, я не хочу очень больших URL-адресов. Благодаря! –