Insight springmvc 根据request-path look up handler method 后缀问题

原创 2016年09月06日 17:41:32

request-path后缀问题:xxx.action,xxx.json怎样look up 处理xxx 请求的method?

...

Determine handler for the current request. 这个过程描述是这样的:

1.Tries all handler mappings in order. 

2.No choice but to go through all mappings...

3.Checks if any of thepatterns match the given request *原来是这样的*

4.Look up the best-matching handler method for the current request.

详见源码:
private String getMatchingPattern(String pattern, String lookupPath) {
    if (pattern.equals(lookupPath)) {
        return pattern;
    }
    // ...
    boolean hasSuffix = pattern.indexOf('.') != -1;
    if (!hasSuffix && this.pathMatcher.match(pattern + ".*", lookupPath)) {
        return pattern + ".*";
    }
    // ...
    return null;
}

private static List asList(String... patterns) {
    return (patterns != null ? Arrays.asList(patterns) : Collections.emptyList());
}
...

总结:

springmvc 针对没有声明但是有后缀的请求,会进行类正则匹配

原则:不抛弃、不放弃每一个request。

...

需要改进的地方:

每一次不在声明中的request-path,springmvc 都会解析匹配处理。

如果像spring 其他的设计,第一次发现匹配成功,追加到urlmap cache(fix size)性能会更好。

...

设计参考:

对于程序的容错、兼容性处理,可以采用try,best-matching 的设计。

...

附带:

spring 返回json 数据的实现,除了response.getWriter()、@ResponseBody 外,还可以配置MappingJacksonJsonView 来实现。

能匹配到MappingJacksonJsonView,前提是mediaType = application/json。

springmvc 也可以配置根据file extensions 转换 mediaType 的功能。

eg:

application/xmlapplication/json

这样,如xxx.json 的请求,默认mediaType = application/json。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tt50335971/article/details/52450886

Spring MVC spring Did not find handler method for 页面显示404问题

最近项目需求,开始研究spring ,struts等框架,照着网上小例子配置,不甚懂的原理的情况下配起来真是麻烦啊        环境: spring MVC , javaEE7.0  Spring...
  • llccf
  • llccf
  • 2016-04-08 15:07:34
  • 13896

Spring MVC 出现 Did not find handler method for [uri] 可能的解决方法

在做SpringMVC 测试时发现在配置完全正确 0.相关JAR包完全导入,Tomcat启动完全成功 1.配置有扫描 ...
  • tienwj
  • tienwj
  • 2017-08-31 22:09:28
  • 5120

Spring MVC spring Did not find handler method for 页面显示404问题【熟悉这个,才能定位问题不是freeMarker问题】

====我的mvc controller组件扫描位置:<!-- 扫描所有controller组件 --> <context:component-sca...
  • qq_20597149
  • qq_20597149
  • 2018-04-09 16:24:49
  • 28

Ambiguous handler methods mapped for HTTP path

java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/getPrams': {public...
  • yejin191258966
  • yejin191258966
  • 2014-11-06 00:13:14
  • 22580

springMVC源码分析--AbstractHandlerMethodMapping获取url和HandlerMethod对应关系(十)

在之前的博客 springMVC源码分析--AbstractHandlerMapping(二)中我们介绍了AbstractHandlerMethodMapping的父类AbstractHandlerM...
  • qq924862077
  • qq924862077
  • 2016-12-21 18:33:59
  • 2650

2014/3/10 SpringMVC中DispatcherServlet理解

一:笔者对于Spring MVC配置文件这块遇到了些问题,之前都是用的别人搭好的环境 感悟一: 1.对于一个Http请求,MVC会寻找DispatcherServlet这个类,所以需要先如下配置,在w...
  • weiweiai123456
  • weiweiai123456
  • 2014-03-10 14:55:17
  • 8320

springMVC前后端数据交互

springMVC前后端数据及交互部分是最重要的,因为其余部分都被封装好了,我们要做的就是这个部分,我的框架才用SSM,进公司以来在项目组也用到了这些,但是不够全面,系统,脑子里面思路混乱,所以总结下...
  • Huangcsdnjava
  • Huangcsdnjava
  • 2017-09-14 14:00:35
  • 3809

三次典型的Http请求日志

一、请求css等静态资源 2017-03-13 11:00:16.336 [http-apr-80-exec-1] DEBUG o.s.w.servlet.DispatcherServlet - D...
  • nimeijian
  • nimeijian
  • 2017-03-13 12:01:30
  • 592

快速上手Spring--9. Lookup方法注入

  这篇文章来谈谈《Spring Framework 开发参考手册》的3.3.3.1小节中的Lookup方法注入。   仔细看看文档,这种方法主要是用在Singleton的Object中使用非Sing...
  • javamxj
  • javamxj
  • 2005-08-17 14:55:00
  • 12208

spring 方法注入 lookup方法注入

1、无状态bean 与有状态bean  无状态Bean    bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,...
  • liyuan0323
  • liyuan0323
  • 2017-04-05 13:00:53
  • 393
收藏助手
不良信息举报
您举报文章:Insight springmvc 根据request-path look up handler method 后缀问题
举报原因:
原因补充:

(最多只允许输入30个字)