RestEasy 用户指南----第4章.使用@Path @GET @POST 等

简介:
@Path("/library")
public class Library {

   @GET
   @Path("/books")
   public String getBooks() {...}

   @GET
   @Path("/book/{isbn}")
   public String getBook(@PathParam("isbn") String id) {
      // search my database and get a string representation and return it
   }

   @PUT
   @Path("/book/{isbn}")
   public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {...}

   @DELETE
   @Path("/book/{id}")
   public void removeBook(@PathParam("id") String id {...}

   
}

如果你在RestEasy servlet 中已经配置过请求的根路径http://hostname.com/services 那么如下请求将会被Library所捕捉到

  • GET http://myhost.com/services/library/books
  • GET http://myhost.com/services/library/book/333
  • PUT http://myhost.com/services/library/book/333
  • DELETE http://myhost.com/services/library/book/333

类和资源方法的@Path(在包javax.ws.rs 中)声明都是必要的,声明的是一个相对路径,根路径,类所声明的路径,方法所声明的路径拼接在一起构成了访问某个resource的一个url。(也就是说,访问这个url,服务端就会自动触发该事件)

包javax.ws.rs 中可以有各种的http 请求方式的声明,例如@GET,@POST,@PUT,@DELETE,@HEAD.你可以把某一特定的请求方式放在public方法之上,你如果你在你的类上有@path的声明,那么在方法上的path声明并不是必须的,但前提是你能够通过不同的http请求来区分不同的方法,这样服务端才能明白你所请求的是那一个资源(方法)。

如果一个方法是只有@Path的声明,而没有http请求方式的声明,那么该方法被称为JAXRSResourceLocators(我觉得作者表达的意思是如果有@Path的声明的方法叫做JAXRSResourceLocators)


4.1 @Path 和正则表达式的映射

@Path的声明并不是仅仅简单的路径表达式。你可以插入正则表达式。例如

 

@Path("/resources)
public class MyResource {

   @GET
   @Path("{var:.*}/stuff")
   public String get() {...}
}

 

下边的get请求将会对应被引导至getResource()方法上


 

GET /resources/stuff

GET/resources/foo/stuff

GET/resources/on/and/on/stuff


 

表达式的规则是

 

 

"{"variable-name [ ":"regular-expression ] "}"


 

正则表达式部分(regular-expression)是可选的,如果没有提供该规则式,那么他默认进行匹配,用正则式来形容就是


"([]*)"


 

例如

 

@Path("/resources/{var}/stuff")


将会会和如下的路径匹配

 

GET/resources/foo/stuff

GET/resources/bar/stuff


但是,和该路径是不匹配的

 

GET/resources/a/bunch/of/stuff

 

(其实,也就是指明的正则表达式说明了该部分的路径应该符合什么样的规则。如果是默认的化,当然,你可以大致了解一下正则表达式)



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/696869,如需转载请自行联系原作者

相关文章
|
SQL XML Java
MyBatis-Plus——代码生成器(3.5.1+版本)
MyBatis-Plus——代码生成器(3.5.1+版本)
2575 0
MyBatis-Plus——代码生成器(3.5.1+版本)
|
存储 SpringCloudAlibaba NoSQL
SpringCloud Alibaba实战二十九 | SpringCloud Gateway 请求响应日志
SpringCloud Alibaba实战二十九 | SpringCloud Gateway 请求响应日志
1044 0
|
缓存 Java Maven
IDEA配置maven和踩坑记录(Unable to import maven project)
IDEA配置maven和踩坑记录(Unable to import maven project)
1714 0
|
人工智能 监控 搜索推荐
💼时间管理大师:AI教你如何高效规划职场每一天,告别拖延症!
【8月更文挑战第1天】在职场征途中,时间宝贵却易流失。传统时间管理手段虽有效,但缺乏个性化支持。AI兴起,成为职场时间管理的新利器。它学习工作习惯,智能定制时间规划,自动整理任务并推荐执行顺序,实时监控进度助克服拖延。例如,AI时间管理软件可自动抓取信息生成任务清单,根据效率和个人偏好制定个性化日程,适时提醒确保不漏重要事项,动态调整计划保高效。通过AI助力,职场人得以解脱繁琐管理,拥抱高效自律生活。
468 0
|
数据可视化 Java 程序员
IDEA插件-Maven Helper
Maven Helper是一个用于Apache Maven项目的IntelliJ IDEA插件,它提供了一些有用的功能来帮助开发人员更好地管理和调试Maven项目。
1425 0
IDEA插件-Maven Helper
|
12月前
|
存储 IDE Java
Java“NoClassDefFoundError”解决
Java中的“NoClassDefFoundError”错误通常发生在尝试访问某个类时,该类在编译时可用但在运行时找不到。解决方法包括:确保所有依赖库已正确添加到类路径中,检查类名和包名是否正确,以及清理并重新构建项目。
2397 3
|
前端开发 小程序 测试技术
前端后端测试接口mork神器,Apifox使用一分钟入门
前端后端测试接口mork神器,Apifox使用一分钟入门
779 0
|
XML 前端开发 Java
还不会SpringBoot项目模块分层?来这手把手教你
本文详细介绍了如何为SpringBoot项目创建模块并进行合理的分层设计。通过逐步演示,从创建项目到构建各功能模块,再到具体代码实现,手把手教你实现整洁的代码分层。主要内容包括:创建依赖层、主启动层、模块层及其子模块(如共通层、控制器层、数据持久层等),并通过实例演示了从前端请求到后台服务调用的实际流程。适合SpringBoot初学者及有一定经验但需优化项目结构的开发者参考。
1686 2
还不会SpringBoot项目模块分层?来这手把手教你
|
12月前
|
开发工具 git
git如何修改提交代码时的名字和邮箱?
git如何修改提交代码时的名字和邮箱?
3107 4
|
缓存 NoSQL Redis
关于redis使用@Cacheable注解redis中不生效问题完美解决
关于redis使用@Cacheable注解redis中不生效问题完美解决
958 113