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,如需转载请自行联系原作者

相关文章
|
2月前
|
Java API Maven
email api java编辑方法?一文教你学会配置步骤
在Java开发中,Email API是简化邮件功能的关键工具。本文指导如何配置和使用Email API Java:首先,在项目中添加javax.mail-api和javax.mail依赖;接着,配置SMTP服务器和端口;然后,创建邮件,设定收件人、发件人、主题和正文;最后,使用Transport.send()发送邮件。借助Email API Java,可为应用添加高效邮件功能。
|
5月前
|
API Windows
解决echarts.apache.org官网不能访问的问题(主要是用于查看配置项API参数细节说明)
解决echarts.apache.org官网不能访问的问题(主要是用于查看配置项API参数细节说明)
|
12月前
|
Java 应用服务中间件 Linux
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
293 0
|
Java 应用服务中间件 Apache
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
125 0
|
Java
【6】JAVA---地址App小软件(QueryPanel.class)(表现层)
【6】JAVA---地址App小软件(QueryPanel.class)(表现层)
234 0
【6】JAVA---地址App小软件(QueryPanel.class)(表现层)
|
开发框架 前端开发 .NET
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(一)
上一章介绍了经过路由的处理,一个请求找到了具体处理这个请求的EndPoint,并最终执行它的RequestDelegate方法来处理这个Httpcontext。本章继续这个处理进程,按照惯例,依然通过几幅图来聊一聊这个RequestDelegate之后的故事。在此就避免不了的聊到各种Filter,它方便我们在action执行的前后做一些 “小动作”。
103 0
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(一)
|
开发框架 缓存 .NET
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(二)
上一章介绍了经过路由的处理,一个请求找到了具体处理这个请求的EndPoint,并最终执行它的RequestDelegate方法来处理这个Httpcontext。本章继续这个处理进程,按照惯例,依然通过几幅图来聊一聊这个RequestDelegate之后的故事。在此就避免不了的聊到各种Filter,它方便我们在action执行的前后做一些 “小动作”。
195 0
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(二)
|
开发框架 .NET
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(三)
上一章介绍了经过路由的处理,一个请求找到了具体处理这个请求的EndPoint,并最终执行它的RequestDelegate方法来处理这个Httpcontext。本章继续这个处理进程,按照惯例,依然通过几幅图来聊一聊这个RequestDelegate之后的故事。在此就避免不了的聊到各种Filter,它方便我们在action执行的前后做一些 “小动作”。
79 0
ASP.NET Core: 十七.Action的执行(Endpoint.RequestDelegate后面的故事)(三)
|
XML 算法 数据可视化
ur驱动包内容解释
ur驱动包内容解释
|
运维 Java API
SpringCloud系列----- >SpringBoot项目中给所有api接口Response添加or修改header信息
前言: 看到标题,估计绝大多数java小伙伴,都没明白这个标题具体是什么意思,到底是解决的什么问题,我们项目组的同事也是一脸懵逼。现在我从需求的角度说,大家就应该能理解了。 公司的项目是一个拥有几十个模块的SpringCloud分布式大项目,每个功能模块是一个单独的SpringBoot项目,例如:.
3112 0