2016-06-22 2 views
0

У меня есть следующий метод 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 консоли:

enter image description here

Я попробовал почти все, но, возможно, еще несколько глаз может помочь мне в этом, я действительно ценю комментарии или любого рода Помогите.

Заранее спасибо.

ответ

2

Похоже, что ваши параметры отправляются в тело POST вместо параметров запроса.

url? Ruleid = a & workgroupid = b получает NumberFormatException, потому что ruleId предполагается Integer.

URL? Ruleid = 1 & workgroupid = Ь или URL? Ruleid = 1 & ruleid = 2 & workgroupid = Ъ должен работать

+0

Я думал, что ExtJS имеет некоторый механизм уплотнительной Params ручки запроса через "Params" конфигурацию. Я взглянул на некоторый код в приложении и понял, что конфигурация «params» используется некоторыми разработчиками, когда метод GET. Для POST я сделал это так, как вы предложили, и работал нормально. Массив может быть большим, поэтому мне, вероятно, потребуется запросить другой способ справиться с этим, я не хочу очень больших URL-адресов. Благодаря! –