我是Spring框架的新手。即使我对注释没有任何深刻的概念。 我正在使用spring mvc 3框架开发一个非常小的应用程序,我也使用了注释。 我有一个困惑。我有一个spring-servlet.xml。这里我没有定义任何处理程序映射。但它仍然有效。所以必须有一些默认的处理程序映射。你能告诉我这个默认的处理程序映射是什么,以及如何覆盖它以便我做一些自定义。
答案 0 :(得分:0)
所有解释都在:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-config
另请参阅此问题:How to use default-servlet-handler和Where to put default-servlet-handler in Spring MVC configuration
答案 1 :(得分:0)
Spring 3.1及更高版本不需要[servlet-name] -servlet.xml中的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter声明
答案 2 :(得分:0)
这些链接可能有所帮助:
我有同样的问题,我刚刚解决,所以我已经确认下面的方法有效,虽然这是注释而不是XML配置。
您可以在控制器类级别指定URL前缀,并包含映射**注释的请求,以确保您对通过此类的其他处理程序的任何内容进行匹配。除了你定义一个保证匹配类级别映射下的所有内容的处理程序之外,这个处理程序没有什么特别的或默认的。
注意:这不是魔术。您的处理程序仍然遵循Spring关于"最佳匹配"的排序算法。当没有其他任何东西匹配处理程序时,有一个注释提供一个真正的默认值会很好,特别是在复杂映射的情况下,其中" **"在这个catch-all处理程序之外是有用的。基本实现是:
@RestController
@RequestMapping(value={"/path1/","/path2/"})
public class MyRestController {
@RequestMapping("/subpath")
String matchedRequestHandler () {
return "This matches /path1/subpath and /path2/subpath.";
}
@RequestMapping("**")
String unmatchedRequestsHandler () {
return "This matches everything else.";
}
}
在我的实际用例中,我需要处理URL模式内部资源的任意路径,因此需要支持可变数量的目录。理想情况下,这将使用如下模式处理:
"/base/{optionaldir}/**/{entityName}/{describeVar:describe.json}"
它本身可以正常工作,但它与绑定到" **"的默认处理程序不兼容。因为" **"映射由Spring计算为更好地匹配这些类型的请求。
相反,我必须在请求映射中添加一堆单独的条目,以支持URL模式中的任意路径,例如。
value={"/base/{optionaldir}/{entityName}/{describeVar:describe.json}",
"/base/{optionaldir}/*/{entityName}/{describeVar:describe.json}",
"/base/{optionaldir}/*/*/{entityName}/{describeVar:describe.json}",
"/base/{optionaldir}/*/*/*/{entityName}/{describeVar:describe.json}"
}
或者,我可以用" **"处理所有事情。我自己映射和解析了URL,但这种方法违背了使用路径变量的请求映射的目的。希望Spring的能力将来会在这个领域发展。