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)