jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配
jax-rs jax-ws
在本文中,我們來看一下JAX-RS中與資源方法匹配的HTTP請求 。 它是JAX-RS的最基本功能之一。 通常,使用JAX-RS API的開發人員不會接觸(或真正不需要知道) 匹配過程的細節,請放心,由于我們的RESTful,JAX-RS運行時會在后臺悄悄地推出其算法??蛻舳吮3帜切〩TTP請求的到來!
萬一術語請求資源方法匹配對您來說是陌生的–就是JAX-RS提供程序通過它向您的資源類之一(使用@Path裝飾)的特定方法分配HTTP請求的過程。 可以使用JAX-RS規范文檔來詳細解釋這一點( 不過,在本文中,我們將僅介紹冰山一角! )
主要標準
在請求匹配過程中要考慮哪些因素?
- HTTP請求URI
- HTTP請求方法(GET,PUT,POST,DELETE等)
- HTTP請求的媒體類型
- 請求的響應的媒體類型
高級步驟
粗略的圖表應該會有所幫助。 在此之前,這里是示例場景
- 兩個資源類 – Books.java,Movies.java
- Books.java中的資源方法路徑 – / books /,/ books / {id}(URI路徑參數),/ books?{isbn}(URI查詢參數)
- HTTP請求URI – / books?isbn = xyz
誰會贏 ?
@Path("books") public class Books{@Produces("application/json")@GETpublic List<Book> findAll(){//find all books}@Produces("application/json")@GET@Path("{id}")public Book findById(@PathParam("id") String bookId){//find book by id e.g. /books/123}@Produces("application/json")@GETpublic Book findByISBN(@QueryParam("isbn") String bookISBN){//find book by ISBN e.g. /books?isbn=xyz} }@Path("movies") public class Books{@Produces("application/json")@GETpublic List<Movie> findAll(){//find all movies e.g. /movies/}@Produces("application/json")@GET@Path("{name}")public Movie findById(@PathParam("name") String name){//find movie by name e.g. /movies/SourceCode} }
JAX-RS請求方法匹配過程
分解正在發生的事情
- 將可能匹配的候選對象縮小到一組資源類
這是通過將HTTP請求URI與資源類上@Path注釋的值進行匹配來完成的
- 從上一步的資源類集中,找到一組可能匹配的候選方法(將算法應用于過濾后的資源類集)
- 歸結為可以處理HTTP請求的確切方法
將HTTP請求謂詞與HTTP方法特定的注釋(@ GET,@ POST等)進行比較,將Content-Type標頭指定的請求媒體類型與@Consumes注釋中指定的媒體類型以及指定的響應媒體類型進行比較將Accept標頭中的“首選項”與@Produces批注中指定的媒體類型進行比較
我強烈建議您查看org.glassfish.jersey.server.internal.routing包中實現類的Jersey服務器端邏輯 ,以加深了解。 您可以查看的一些類/實現是
- MatchResultInitializerRouter
- SubResourceLocatorRouter
- 方法選擇路由器
- 路徑匹配路由器
是時候挖了……。?
祝您黑客愉快!
翻譯自: https://www.javacodegeeks.com/2015/03/quick-peek-at-jax-rs-request-to-method-matching.html
jax-rs jax-ws
總結
以上是生活随笔為你收集整理的jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 葫芦侠我的世界修改器电脑版(葫芦侠我的世
- 下一篇: jboss入门_JBoss Forge