The valid characters are defined in RFC 7230 and RFC 3986解决方案

js通过url向后台传List对象遇到问题,异常提示:Invalid character found in the request target [/erecord/recommendation/examineBatchNew?data=[{]. The valid characters are defined in RFC 7230 and RFC 3986

异常信息大概的意思是请求头中包含了 RFC 7230 and RFC 3986规范中定义的非法字符。

一、出现问题代码片段

1、js片段:row是从bootstrapTable表格选中的对象,并通过JSON.stringify(row)转化为json字符串data,然后通过url传递到后台方法

function examineBatchNew() {
    var row = $("#bootstrap-table").bootstrapTable('getSelections');
    if ($.common.isEmpty(row)) {
        $.modal.alertWarning("请至少选择一条记录");
        return;
    } else {
        var row = $("#bootstrap-table").bootstrapTable('getSelections');
        var data= JSON.stringify(row);
        var url = prefix + '/examineBatchNew?data='+data;
        openexamine("批量通过原因", url);
    }
}

function openexamine(title, url, width, height, callback) {
    // 如果是移动端,就使用自适应大小弹窗
    if ($.common.isMobile()) {
        width = 'auto';
        height = 'auto';
    }
    if ($.common.isEmpty(title)) {
        title = false;
    }
    if ($.common.isEmpty(url)) {
        url = "/404.html";
    }
    if ($.common.isEmpty(width)) {
        width = 1000;
    }
    if ($.common.isEmpty(height)) {
        height = 600;
    }
    if ($.common.isEmpty(callback)) {
        callback = function (index, layero) {
            var iframeWin = layero.find('iframe')[0];
            iframeWin.contentWindow.submitHandler(index, layero);
        }
    }
    top.layer.open({
        type: 2,
        area: [width + 'px', height + 'px'],
        fix: false,
        //不固定
        maxmin: true,
        shade: 0.3,
        title: title,
        content: url,
        // 弹层外区域关闭
        shadeClose: true,
        yes: callback,
        end:function () {
            $.table.refresh('bootstrap-table');
        },
        cancel: function (index) {
            return true;
        }
    });
}

2、controller:

@RequestMapping("/examineBatchNew")
public String examineBatchNew(String data, ModelMap mmap){
    mmap.put("data", data);
    return sjPrefix + "/examineBatch";
}

3、js执行报错,提示:Invalid character found in the request target [/erecord/recommendation/examineBatchNew?data=[{]. The valid characters are defined in RFC 7230 and RFC 3986,并没有进入后台断点,查看js传递的参数信息data为
在这里插入图片描述
报错原因:RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,该参数包含了多项无法识别的字符

二、解决方案

在js使用encodeURI()对数据进行重新编码,在后台使用URLDecoder.decode()进行解码即可
1、js片段:
在这里插入图片描述

2、controller:
在这里插入图片描述

RFC 7230RFC 3986中定义了有效字符。RFC 3986规定,URL只允许包含字母,数字以及四个特殊字符(- _ . ~)。这些字符 ! * ’ ( ) ; : @ & = $ , / ? # [ ] 属于保留字符,所以是非法字符,不能出现在URL地址中。 RFC 7230也提到了URL中的有效字符,但没有具体列出字符列表。因此,有效字符的定义可以通过结合这两个RFC来理解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [解决Invalid character found in the request ... The valid characters are defined in RFC 7230 and RF](https://blog.csdn.net/ywb201314/article/details/128315057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [The valid characters are defined in RFC 7230 and RFC 3986-Tomcat解决方案](https://blog.csdn.net/oscar999/article/details/123513119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值