在HTTP请求参数中,最后的一个参数使用了’.'号,导致后端无法获取,如restfulAPI时后面链接最后的点丢失情况的处理http://www.wlgdo.com/index/account/uip/127.0.0.1
大概原因分析如下:
- 在Spring MVC初始化的时候会把@RequestMapping解析生成请求url与对应页面控制器的关联关系 – Spring MVC @RequestMapping
- 当用户发送一个请求时来到前端控制器,前端控制器根据请求url来决定使用哪个页面控制器(也就是@Controller类中的@RequestMapping方法)进行处理并把请求委托给HanderAdpter。– Spring MVC DispatcherServlet
- 在调用这个页面控制器的前后会涉及到拦截器的调用,也就是HandlerIntercepter。
在调用完成页面控制器之后会返回ModelAndView对象。 最后通过页面渲染器(ViewResolver)把对应的页面模板以及数据进行渲染返回给请求。 - 其实在调用hander方法前后有2个动作就是对于HandlerMethod里面的请求参数解析(HandlerMethodArgumentResolver)以及返回参数解析(HandlerMethodReturnValueHandler)。现在主要的是讨论请求参数解析。
但是Spring MVC中,在路径参数中如果带”.”的话“.”后面的值将会被忽略。例如访问http://www.wlgdo.com/hido/index.do。Spring MVC就会把“.”后面的do忽略。
网上有很多解决方案,但是都不是最合理的方案,最合理的方案是使用SpEL即可以处理该情况:如下代码