后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.

后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.

报错信息

在这里插入图片描述

报错原因

当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。

例如:http://localhost:8080/index.do?{id:123}

解决方法

之前看过的有几个解决方法都是修改tomcat配置文件

  1. 修改tomcat的server.xml配文件,加上URIEncoding="utf-8" relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%"
    在这里插入图片描述
  2. 修改tomcat的catalina.properties文件,本人在网上找到了两种修改方法
    (1)在 conf/catalina.properties 中最后添加一行:org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
    (2)或者在conf/catalina.properties 中添加tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
  3. 使用post提交
    开始时本人的代码是用get请求去进行批量下载,但是在请求中遇到了这种问题。开始是用第一种方法修改tomcat的server.xml配置文件,当时和之后一段时间内确实没有问题,但是一段时间之后,又开始报了这个问题,于是本人改用了post请求
原get请求
function batchExport(title,url,id) {
		gridname=id;
		const didAndCaseIds = [];
		const rows = $("#" + id).datagrid('getSelections');
		if (rows.length > 0) {
			for (let i = 0; i < rows.length; i++) {
				const didAndCase = {did: rows[i].did, caseId: rows[i].caseId};
				didAndCaseIds.push(didAndCase);
			}
			const ids = JSON.stringify(didAndCaseIds);
		    window.location = url+'&ids='+ids;
			tip("请选择需要操作的数据");
		}
	}
post请求
function batchExport(title,url,id) {
		gridname=id;
		const didAndCaseIds = [];
		const rows = $("#" + id).datagrid('getSelections');
		if (rows.length > 0) {
			for (let i = 0; i < rows.length; i++) {
				const didAndCase = {did: rows[i].did, caseId: rows[i].caseId};
				didAndCaseIds.push(didAndCase);
			}
			const ids = JSON.stringify(didAndCaseIds);
			var formObject = document.createElement('form');
			$(document.body).append(formObject);
			formObject.setAttribute('method', 'post');
			formObject.action = url;
			var inputObject = document.createElement('input');
			inputObject.setAttribute('type', 'hidden');
			inputObject.setAttribute('name', 'ids');
			inputObject.setAttribute('value', ids);
			formObject.appendChild(inputObject);
			formObject.submit();
		} else {
			tip("请选择需要操作的数据");
		}
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值