您的位置:首页 > 编程语言 > Java开发

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

2018-01-20 22:49 369 查看

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

大概原因分析如下:

在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即可以处理该情况:如下代码

/**
* 更新用户电表信息
*
* @author Ligang.Wang[wlgchun@163.com]
* @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", "更新失败");
}


至此,你的所有的需求不受其他影响得解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springmvc restful