最近用到的一個項目,看到Controller控制層、Method方法都是通篇的@Path注解,由於之前並沒有使用過該注解,故記此篇。
首先看一下項目中的使用方式:
@Path("clientWeb")
public class ClientWeb {
@POST
@Path("/getData")
public String getData(@QueryParam("start") Integer start,@QueryParam("limit") Integer limit) {
return "xxx"
}
}
如上我們可以看到,@Path注解可以標記在類名之上,也可以標記在方法名上。該注解接收一個value參數,表示定義資源的地址。
另外,資源地址相同,但是HTTP方法不同的兩個方法是完全兩個不同的REST接口,HTTP方法和資源地址相結合在一起才可以完成對一個資源的定位。
點進@Path注解后查看其源碼如下:
package javax.ws.rs;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Path {
String value();
}
我們可以發現其屬於 javax.ws.rs 包,java.ws.rs 是 jax-rs 規范中定義的包名,什么鬼?
jax-rs 全稱是:java API for RESTful Services,這是一套規范,規范文檔。
簡單點說就是這套規范是為構建restful服務的 [restful可以理解為web接口],我們知道Spring自帶了對restful的支持,但是呢,Spring並沒有遵循這個協議,言外之意就是不具有移植特性,怎么講?
舉例:JPA大家應該了解吧,采用JPA開發規范的話,很容易實現Mysql與Oracle等數據庫的遷移,因為符合規范。
盡管Spring並不遵循這個協議,但還是Spring好用。
再回到jax-rs,目前能夠實現jax-rs標准的框架有很多,比如:
- Apache CXF,開源的Web服務框架。
- Jersey, 由Sun提供的JAX-RS的參考實現。
- RESTEasy,JBoss的實現。
- Restlet,由Jerome Louvel和Dave Pawson開發,是最早的REST框架,先於JAX-RS出現。
- Apache Wink,一個Apache軟件基金會孵化器中的項目,其服務模塊實現JAX-RS規范。
說這么多,其實是想get一點,就是在當下都用Spring的環境下,還是有許多可以實現web服務的,重新再來看@Path吧。
@Path就當@RequestMapping來用,如下所例。
@Path("/clientWeb")
public class ClientWeb{
@GET
@Path("/getData")
public String getData(String params) {
return “xxx";
}
}
訪問路徑為:http://:/<應用域>/clientWeb/getData
參考:https://segmentfault.com/q/1010000002484009/a-1020000002484552
我創建了一個用來記錄自己學習之路的公眾號,感興趣的小伙伴可以關注一下微信公眾號:niceyoo
