我有这个对象data
我解析要在HTTP GET中使用的对象
baseURL+ "/previewDocument?" + $.param(data)
并生成了这样的网址:
http://localhost:8081/api/previewDocument?parameters%5BMAIL_BODY%5D=¶meters%5BMAIL_FROM%5D=¶meters%5BMAIL_RECEIVED_DATE%5D=¶meters%5BMAIL_SUBJECT%5D=¶meters%5BMAIL_TO%5D=&deliveryChannel=NONE&templateID=9093
我的API控制器就是这样:
@RequestMapping(value = "/previewDocument", method = RequestMethod.GET, produces = "application/pdf")
public byte[] previewDocument(@RequestParam Map<String, String> parameters, @RequestParam String templateID, @RequestParam String deliveryChannel) {
// stuff
}
问题在于,而不是仅具有与我的data.parameters
具有以下内容:
{parameters[MAIL_BODY]=, parameters[MAIL_FROM]=, parameters[MAIL_RECEIVED_DATE]=, parameters[MAIL_SUBJECT]=, parameters[MAIL_TO]=, deliveryChannel=NONE, templateID=9093}
错了。我应该有这样的东西:
{MAIL_BODY=, MAIL_FROM=, MAIL_RECEIVED_DATE=, MAIL_SUBJECT=, MAIL_TO=}
此值(@RequestParam String templateID, @RequestParam String deliveryChannel)
已正确填写。我唯一的问题是地图参数。
有人可以向我解释如何解决此问题吗?
答案 0 :(得分:0)
如果方法参数为
Map<String, String>
或MultiValueMap<String, String>
并且未指定参数名称, 然后使用所有请求参数名称填充map参数 和值。
您可以从地图中手动删除多余的参数,也可以将它们作为路径参数发送。
已更新:
看起来您需要首先展平data
对象,因此所有参数都处于同一级别。像这样(我对JS不太熟悉):
function flatten(obj) {
var result = {};
function process(element) {
$.each(element, function(key, value) {
if (typeof value === 'object') process(value);
else result[key] = value;
});
}
process(obj);
return result;
}
然后使用它生成URL:
baseURL+ "/previewDocument?" + $.param(flatten(data))