2013-05-29 28 views
0

我是Spring框架的新手。即使我没有关于注释的深层概念。 我正在开发一个使用spring mvc 3框架的非常小的应用程序,我也使用了注解。 我有一个困惑。我有一个spring-servlet.xml。这里我没有定义任何处理程序映射。但它仍在工作。所以必须有一些默认的处理程序映射。你可以让我让这个默认处理程序映射是什么,以及我如何覆盖它,以便我做一些定制。基于注释的弹簧项目的默认处理程序映射

回答

0

春3.1和更高版本犯规需要DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter上的声明在[的servelt名称] -servlet.xml后缀

0

这些链接可能有帮助:

  1. Spring Controller to handle all requests not matched by other Controllers

  2. https://dzone.com/articles/using-the-spring-requestmapping-annotation

我,我只是解决了,所以我已经确认以下作品的做法同样的问题,虽然这是注释,而不是一个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自己,但那种失败的使用要求与映射路径变量的目的。希望春天的能力将在这个领域发展。