POST 中未处理作为 QueryParam 的数组
Array as QueryParam is not being processed in POST
我使用 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 实体相关的模型。
如您所见,两个列表都作为查询参数处理,我在 Ajax 请求中使用了 "params" 配置;但是,这不起作用。
似乎 ruleId 数组是空的,当它尝试迭代时 rulesIdList 是空的,所以方法 POST 有效,但它总是返回一个空列表。
我知道我不能以 "url?ruleid=a&workgroupid=b" 的形式使用它们。当我出于好奇尝试它时,我得到一个 QueryParamException 和 NumberFormatException 说规则数组被认为是字符串。
当我对两个参数都使用 "Ext.encode" 时,我在浏览器控制台中收到一条消息,指出超出了最大调用堆栈大小。
这是我从 Chrome 控制台得到的:
我几乎尝试了所有方法,但也许更多的眼睛可以帮助我,我非常感谢评论或任何类型的帮助。
提前致谢。
您的参数似乎在 POST 正文中,而不是作为查询参数。
url?ruleid=a&workgroupid=b 收到 NumberFormatException,因为 ruleId 应该是整数。
url?ruleid=1&workgroupid=b 或 url?ruleid=1&ruleid=2&workgroupid=b 应该有效
我使用 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 实体相关的模型。
如您所见,两个列表都作为查询参数处理,我在 Ajax 请求中使用了 "params" 配置;但是,这不起作用。
似乎 ruleId 数组是空的,当它尝试迭代时 rulesIdList 是空的,所以方法 POST 有效,但它总是返回一个空列表。
我知道我不能以 "url?ruleid=a&workgroupid=b" 的形式使用它们。当我出于好奇尝试它时,我得到一个 QueryParamException 和 NumberFormatException 说规则数组被认为是字符串。
当我对两个参数都使用 "Ext.encode" 时,我在浏览器控制台中收到一条消息,指出超出了最大调用堆栈大小。
这是我从 Chrome 控制台得到的:
我几乎尝试了所有方法,但也许更多的眼睛可以帮助我,我非常感谢评论或任何类型的帮助。
提前致谢。
您的参数似乎在 POST 正文中,而不是作为查询参数。
url?ruleid=a&workgroupid=b 收到 NumberFormatException,因为 ruleId 应该是整数。
url?ruleid=1&workgroupid=b 或 url?ruleid=1&ruleid=2&workgroupid=b 应该有效