【发布时间】:2018-04-18 16:01:15
【问题描述】:
我有一个 api:
http://localhost:8080/mylocalserver/#/reports/{parameter1}/{parameter2}
现在第一个参数是 parameter1 = "12345/EF" 第二个参数是parameter2 = "Text"
我正在使用 Spring Rest Controller 来创建 api。
当使用以下上述参数发出请求时,它会显示
Request Not Found 错误。
我尝试使用URLEncoder.encode 和UriUtils.encode(param, StandardCharsets.UTF_8.name()) 对参数进行编码和解码,但仍然出现相同的错误。
下面是我试过的代码。
假设我从用户输入中得到了两个变量
parameter1 和 parameter2
现在我使用以下参数创建一个 URL
private void createApi(String parameter1, String parameter2) {
try {
String uri = " http://localhost:8080/mylocalserver/#/reports/"+encode(parameter1)+"/"+encode(parameter2)+" ";
ServletRequestAttributes requestAttributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
HttpServletResponse response = requestAttributes.getResponse();
request.getRequestDispatcher(uri).forward(request, response);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
}
我的编码方法是:
public String encode(String param) {
try {
UriUtils.encode(param, StandardCharsets.UTF_8.name())
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
return param;
}
注意:我使用的是 Tomcat 8.5
【问题讨论】:
-
用
12345%2FEF手动转义斜线是否有效? -
@assylias 该请求完全取决于用户,因为他可以在变量中输入任何值,因此我无法手动替换这些值。因此我尝试对参数进行编码,但没有成功。跨度>
-
很好的解释和可能的重复:stackoverflow.com/questions/4069002/…
-
@swetanshkumar 问题是
URLEncoder.encode("12345/EF", UTF_8.toString())确实按预期返回12345%2FEF- 你说当你手动传递该字符串时它工作正常。所以目前还不清楚发生了什么。请提供minimal reproducible example。
标签: java spring-restcontroller