SpringMvc接收参数问题 The valid characters are defined in RFC 7230 and RFC 3986 错误

1.入参接口定义如下:

{
"type": "All",// "All":自动全部分配,"":自动分配list
"list": [{
"id": "UQzDue9QkYOgF8Ev",//基金公司id
"route": "bvtest01",// 通道
"symbol": "002739.SZ"// 股票代码
}]
}


2.前端传递的list参数应该是标准的Json类型参数,下面是浏览器url自测的传参演示:

http://localhost:8080/xxxx/xxxxxxxxxx.json?type=&list=%5b%7b%22id%22%3a%22UQzDue9QkYOgF8Ev%22%2c%22route%22%3a%22bvtest01%22%2c%22symbol%22%3a%22002739.SZ%22%7d%5d

其中list=后面的部分为(通过url转码:http://tool.chinaz.com/tools/urlencode.aspx  后的地址栏编码):

[{"id":"UQzDue9QkYOgF8Ev","route":"bvtest01","symbol":"002739.SZ"}]


3.后端如何接收这个list,并转成我们需要的List<Map<String, String>>格式数据。

public Object xxxxxock(HttpServletRequest request, HttpServletResponse response,
                                     @RequestParam String type,
                                     @RequestParam( required = false) String list) {
    Map<String, Object> resultMap = new HashMap<>();
    List<Map<String, String>> formList = JSON.parseObject(list, List.class);//将String转换格式

    if (!"All".equals(type) && formList.size() != 0) {  
        for (Map<String, String> map :
                formList) {
            String symbol = map.get("symbol");
            String route = map.get("route");
            String groupId = map.get("id");
            }
        }

解决的过程:

后台接收参数时报错,

The valid characters are defined in RFC 7230 and RFC 3986 错误

于是贴百度,发现

大概原因是:

在tomcat 8.0.35之后 ,tomcat对url的参数做了比较规范的限制,必须按照RFC 7230 and RFC 3986规范,对于非保留字字符,如果不做转义处理,一律都会报The valid characters are defined in RFC 7230 and RFC 3986 错误。

解决这个问题的办法有几个:

  1. 把非保留字字符做转义
  2. 就是使用保留字字符
  3. 将json数据进行urlencode编码就可以了 即把json中的{}编码

猜你喜欢

转载自blog.csdn.net/changudeng1992/article/details/80969157
今日推荐