HTTP GET读取错误的值

时间:2019-02-22 12:01:28

标签: javascript java spring

我有这个对象data

enter image description here

我解析要在HTTP GET中使用的对象

baseURL+ "/previewDocument?" + $.param(data)

并生成了这样的网址:

http://localhost:8081/api/previewDocument?parameters%5BMAIL_BODY%5D=&parameters%5BMAIL_FROM%5D=&parameters%5BMAIL_RECEIVED_DATE%5D=&parameters%5BMAIL_SUBJECT%5D=&parameters%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

相关的Map的参数

具有以下内容:

{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)已正确填写。我唯一的问题是地图参数。

有人可以向我解释如何解决此问题吗?

1 个答案:

答案 0 :(得分:0)

根据documentation

  

如果方法参数为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))