为什么springmvc请求参数中的点后面的参数没了

Springmvc框架下使用restful API时后面链接最后的点丢失情况的处理

大概原因分析如下:

  1. 在Spring MVC初始化的时候会把@RequestMapping解析生成请求url与对应页面控制器的关联关系 – Spring MVC @RequestMapping
  2. 当用户发送一个请求时来到前端控制器,前端控制器根据请求url来决定使用哪个页面控制器(也就是@Controller类中的@RequestMapping方法)进行处理并把请求委托给HanderAdpter。– Spring MVC DispatcherServlet
  3. 在调用这个页面控制器的前后会涉及到拦截器的调用,也就是HandlerIntercepter。
    在调用完成页面控制器之后会返回ModelAndView对象。 最后通过页面渲染器(ViewResolver)把对应的页面模板以及数据进行渲染返回给请求。
  4. 其实在调用hander方法前后有2个动作就是对于HandlerMethod里面的请求参数解析(HandlerMethodArgumentResolver)以及返回参数解析(HandlerMethodReturnValueHandler)。现在主要的是讨论请求参数解析。

但是Spring MVC中,在路径参数中如果带”.”的话“.”后面的值将会被忽略。例如访问http://www.wlgdo.com/hido/index.do。Spring MVC就会把“.”后面的do忽略。

网上有很多解决方案,但是都不是最合理的方案,最合理的方案是使用SpEL即可以处理该情况:如下代码

/**
     * 更新用户电表信息
     * 
     * @author Ligang.Wang[[email protected]]
     * @date 2018年1月20日下午9:07:08
     * @param room
     * @param user
     * @return
     */
    @RequestMapping(value = "owner/elect/{room}/{electfee:.+}", method = RequestMethod.GET)
    public Object updateOwnerEletic(@PathVariable String room, @PathVariable String electfee) {
        log.info("更新用户电费:{},{}", room, electfee);
        Owner owner = ownerrService.update(new Owner(room, electfee, null));
        if (owner != null) {
            return new Resp(RespCode.SUCCESS, owner);
        }
        return new Resp("-1", "更新失败");
    }

至此,你的所有的需求不受其他影响得解决了。

猜你喜欢

转载自blog.csdn.net/leegoowang/article/details/79117457