我有与的URIEncoding =“UTF-8”配置的HTTP和AJP连接器在Tomcat 7运行的弹簧MVC应用程序。 我的休息控制器片段:
@Controller
@RequestMapping("")
public class ClientRestApi {
private final String API_PREFIX = "/api/1.0/client";
...
@RequestMapping(value = API_PREFIX + "/{clientId}", method = RequestMethod.GET)
@ResponseBody
public ClientDetails get(@PathVariable String clientId, HttpServletRequest request) {
log.info("Client API GET [" + clientId + "] | " + request.getRequestURI());
...
}
}
- 当我去:
http://www.example.pl/api/1.0/client/abc
我得到ABC客户端页面- 正确 - 当我去:
http://www.example.pl/%07api/1.0/client/abc
我得到ABC客户端页面- 错 - 当我去:
http://www.example.pl/%0bapi/1.0/client/abc
我得到ABC客户端页面- 错 - 当我去:
http://www.example.pl/ap%0bi/1.0/client/abc
我得到HTTP 404 - 正确
在应用程序日志中我可以看到(用于前3个请求):
ClientRestApi - Client API GET [abc] | /api/1.0/client/abc
ClientRestApi - Client API GET [abc] | /%07api/1.0/client/abc
ClientRestApi - Client API GET [abc] | /%0bapi/1.0/client/abc
我的问题是,为什么我的错误例子是错了吗? 为什么他们不HTTP 404?
在应用web.xml文件我有UTF-8编码CharacterEncodingFilter滤波器。 我从来没有在我的应用程序有错误的编码任何问题。
编辑:从扩展日志,要求http://www.example.pl/%0bapi/1.0/client/abc得到:
DEBUG RequestMappingHandlerMapping - Looking up handler method for path /^Kapi/1.0/client/abc
TRACE RequestMappingHandlerMapping - Found 1 matching mapping(s) for [/^Kapi/1.0/client/abc] : [{[/api/1.0/client/{
clientId}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}]
DEBUG RequestMappingHandlerMapping - Returning handler method [public ClientDetails ...ClientRestApi.get(java.lang.String,javax.servlet.http.HttpServletRequest)]