Java SpringMVC-DispatcherServler&x27;s url模式样式

Java SpringMVC-DispatcherServler&x27;s url模式样式,java,rest,spring-mvc,servlets,Java,Rest,Spring Mvc,Servlets,我正在尝试使用springMVC构建一个restful风格的API 当为springMVC的DispatcherServlet配置url模式时,似乎有两种选择,我需要一些建议 选择A: 将模式配置为:*.action 和操作使用路径,如@RequestMapping(“/role/add.action”) 选择B: 配置模式为:/api/* 和操作使用路径,如@RequestMapping(“/api/role/add”) 我更喜欢使用没有后缀的样式,但在这种情况下,我需要添加一个子路径 但我不

我正在尝试使用
springMVC
构建一个restful风格的API

当为springMVC的DispatcherServlet配置url模式时,似乎有两种选择,我需要一些建议

选择A:
将模式配置为:
*.action

和操作使用路径,如
@RequestMapping(“/role/add.action”)

选择B:
配置模式为:
/api/*

和操作使用路径,如
@RequestMapping(“/api/role/add”)

我更喜欢使用没有后缀的样式,但在这种情况下,我需要添加一个子路径

但我不确定哪一个更适合在一个项目中使用,该项目作为提供restful API的后端,以browser/IOS/Android作为其客户端


可能有一个选择C,但我不确定:

配置模式为:
/*

和操作使用路径,如
@RequestMapping(“/role/add”)

在这种情况下,内置servlet将被覆盖,例如jsp将无法正常工作。
但是我没有任何
jsp
,而且像
html/js/css/image/document/music/video
这样的静态资源都放在另一个由
nginx
服务的端口或服务器上,请求tomcat只通过json数据提供ajax服务。

因此,在这种情况下,使用选择C是正确的,或者它有一些不良的副作用?

< P>我将与Rest>Best<强> > REST服务,考虑使用<代码> REST 执行<代码> CRUD < /C>操作。您可以将
url模式映射为

config pattern as: <url-pattern>/api/*</url-pattern>

如果您的目标是RESTfulAPI,那么我的选择是第二个,因为您在url中标识了资源;假设您必须管理一个角色资源,您应该具有以下映射:

@RequestMapping("/api/role" method = RequestMethod.POST)
插入新角色(可能是api不允许的)

更新现有角色的步骤

@RequestMapping("/api/role/{roleId}" method = RequestMethod.DELETE)
删除角色

@RequestMapping("/api/role" method = RequestMethod.GET)
检索角色(您可以通过查询字符串实现一些过滤器)

这同样适用于其他资源(用户等)。命名模式是相同的


我建议避免使用选项C,因为我认为如果你的应用程序还提供了一个不使用api的web界面,那么最好为api设置一个专用映射。

我建议使用Spring Boot,这样就不需要任何此类规范。@chrylis你能帮我解释一下Spring Boot是如何解决这个问题的吗?因为根据servlet规范,我找不到一个既没有后缀也没有子路径的模式,同时可以避免覆盖内置的servlet。Spring Boot为您管理整个容器,因此您根本不需要指定任何路径。这是一个很好的建议,但很多api都有多个参数,所以我仍然需要把参数放在
之后或者http正文中,我猜。是的,这也取决于API。为什么不使用对象来表示多个参数呢?我有时使用对象,但这也只适用于API的一部分,例如,搜索服务可能有来自多个模型的更多参数。
@RequestMapping("/api/role/{roleId}" method = RequestMethod.DELETE)
@RequestMapping("/api/role" method = RequestMethod.GET)