...
注意本节介绍的内容只是单独使用openresource时的注意事项,默认均是已完成单点登录的集成。
1、选择正确的传参字符串json
在资源集成的时候,openresource请求的paramsInfo、paramsInfoBase64两个参数是用来传递参数,传递的参数信息需要一个json格式的字符串,在不同的资源里其传递的字符串格式是不一样的。需要根据不同的资源选择正确的参数json串,选择正确的传参字符串参数传递的问题可以解决70%的问题。在资源集成的时候,openresource请求的paramsInfo、paramsInfoBase64两个参数是用来传递参数,传递的参数信息需要一个json格式的字符串。在不同的资源里其传递的字符串格式是不一样的,所以需要根据不同的资源选择正确的参数json串,选择正确的传参字符串参数传递的问题可以解决很多参数传递失败的问题。
代码块 |
---|
http://localhost:18080/smartbi/vision/openresource.jsp?resid=I402881e5019608c408c4fb7801960e2ec9b42d3d¶msInfo= |
各资源参数选择如下
电子表格、旧即席查询、旧透视分析
代码块 | ||
---|---|---|
| ||
单参数: [{"name":"发货区域", "value":"华北","displayValue":"华北"}] 多参数: [{"name":"发货区域", "value":"华北","displayValue":"华北"},{"name":"订单年份", "value":"2020","displayValue":"2020"} ] 多选参数:[{"name":"订单年份", "value":"2020,2021","displayValue":"2020,2021"}] |
仪表盘、新即席查询、新透视分析
代码块 | ||
---|---|---|
| ||
单参数: {"订单年份":{"values":["2020"]}} 多参数: {"订单年份":{"values":["2020"]}, {"订单月份":{"values":["2020-01"]} } 多选参数:{"订单年份":{"values":"2020,2021" }} 或 {"订单年份":{"values":["2020","2021"]}} 或 [{"name":"订单年份", "value":["2020","2021"],"displayValue":["2020","2021"] }] |
注意:仪表盘除去以上格式之外也支持使用电子表格的参数传递方式
多选参数注意事项
- 由于电子表格里参数是通过英文逗号进行分割多个参数,所以在多个参数传递的时候只能写成"value":"2020,2021" ,若业务数据中不规范有逗号,则会解析为两个参数,由于电子表格的架构实际目前无法解决该问题。
- 仪表盘上的参数逻辑不同于电子表格,不仅可以写成"values":"2020,2021"和电子表格的逻辑一致,还额外提供了数组的写法"values":["2020","2021"]。此时需要注意,如果使用数组的写法,数组中的每一项表示一个参数,如写为"values":["2020,2021"]则表示传递的参数是2020,2021的整体,而不是拆分成两个参数,可解决业务数据中有英文逗号的问题。
...
代码块 |
---|
http://localhost:18080/smartbi/vision/openresource.jsp?resid=I402881e5019608c408c4fb7801960e2ec9b42d3d¶msInfo=[{"name":"发货区域", "value":"华北","displayValue":"华北"}] |
HTTP状态 400 - 错误的请求
在参数的链接中我们可以发现其存在中文数据,同时也存在特殊字符,访问时就很可能会出现如下Tomcat报错"HTTP状态 400 - 错误的请求"的报错,在报错的描述信息中可以看到原本paramsInfo后面加的参数变成了一堆编码,其错误描述中大致的意思是请求信息中有无效的字符导致的。
...
出现这个问题是因为tomcat高版本严格按照RFC 3986规范解析地址。该规范只允许包含a-zA-Z 0-9 - _ . ~ 以及所有保留字符 ! * ’ ( ) ; : @ & = + $ , / ? # [ ] 通常情况下参数中使用的保留字符并不会识别为参数的内容,而是识别为请求相关的内容。
所以当请求中有除去上述的特殊字符或中文的时候基于Tomcat的限制,会识别不到请求所以抛出400的错误状态码。那实际遇到这种问题的时候又该如何解决呢?所以当请求中有除去上述的特殊字符或中文的时候会被Tomcat的限制,会识别不到请求所以抛出400的错误状态码。那实际遇到这种问题的时候又该如何解决呢?方案一:使用 encodeURIComponent
方案一:使用 encodeURIComponent 函数进行url转码
url转码是浏览器请求时面对不合法的请求时进行转化的重要手段,实现的原理是将需要转码的字符,按指定编码方式(默认使用UTF-8编码)转化为字节流,然后每个字节按16进制表示,最后添加%组成一个percent编码,最终就会变成%+16进制+16进制的格式
...
代码块 |
---|
http://localhost:18080/smartbi/vision/openresource.jsp?resid=I402881e5019608c408c4fb7801960e2ec9b42d3d¶msInfo=%5B%7B%22name%22%3A%22%E5%8F%91%E8%B4%A7%E5%8C%BA%E5%9F%9F%22%2C%22value%22%3A%22%E5%8D%8E%E5%8C%97%22%2C%22displayValue%22%3A%22%E5%8D%8E%E5%8C%97%22%7D%5D |
方案二:修改tomcat的server.xml配置文件
在Tomcat/conf/server.xml文件中,可以在请求端口的配置中添加relaxedPathChars="|{}[],%"和relaxedQueryChars="|{}[],%" 两个参数同样也可解决该问题,特殊情况下还需要多添加一个URIEncoding="UTF-8" 的参数,避免因为字符集导致的转码异常。
...