作为QueryParam的数组未在POST中处理

时间:2016-06-22 21:07:04

标签: java rest jersey extjs4.2

我使用Jersey实现了以下Java REST方法:

@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类型的对象列表,以及我稍后会做的一些额外处理的上下文。

我使用Sencha 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实体相关的模型。

正如您所看到的,两个列表都被作为查询参数处理,我使用&#34; params&#34;在Ajax请求中配置;但是,这不起作用。

看起来像ruleId数组是空的,当它尝试迭代rulesIdList为空时所以方法POST工作,但它总是返回一个空列表。

我知道我不能在表格中使用它们&#34; url?ruleid = a&amp; workgroupid = b&#34;。当我通过好奇心尝试它时,我得到一个QueryParamException和NumberFormatException,说规则数组被认为是字符串。

当我使用&#34; Ext.encode&#34;对于这两个参数,我在浏览器控制台中收到一条消息,指出超出最大调用堆栈大小。

这是我从Chrome控制台获得的内容:

enter image description here

我已经尝试了几乎所有的东西,但也许更多的眼睛可以帮助我,我真的很感激评论或任何形式的帮助。

提前致谢。

1 个答案:

答案 0 :(得分:2)

看起来您的参数将在POST正文中而不是作为查询参数。

url?ruleid = a&amp; workgroupid = b正在获取NumberFormatException,因为ruleId应该是Integer。

url?ruleid = 1&amp; workgroupid = b或url?ruleid = 1&amp; ruleid = 2&amp; workgroupid = b应该正常工作