神奇好望角 The Magical Cape of Good Hope

          庸人不必自擾,智者何需千慮?
          posts - 26, comments - 50, trackbacks - 0, articles - 11
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          前面介紹了各種請求參數的注入,這些參數在 HTTP 請求中都是以純文本的方式存在的。在處理參數的時候,往往需要把這些文本參數轉換為 Java 對象。JAX-RS 提供了一些內置的規則里自動完成這種轉換。

          轉換規則一覽

          JAX-RS 提供了四條自動類型轉換規則,下面我們逐條考察。

          原始類型

          這個早就見識過了,無需多說。舉例回顧一下:

          @GET
          @Path("{id}")
          public Movie getXxx(@PathParam("id") int id) {/*...*/}
              

          提供接受單個 String 參數的構造器的類型

          這個也不難理解,JAX-RS 會自動調用該構造器創建一個對象:

          public class Style {
              public Style(String name) {/* ... */}
              // ...
          }
          
          @GET
          @Path("{name}")
          public Movie getXxx(@PathParam("name") Style style) {
              // JAX-RS 已自動調用 xxx = new Style(name)
              // ...
          }
              

          提供靜態工廠方法 valueOf(String) 的類型

          也好理解。特別需要注意的是,所有的枚舉類型都在此列,因為編譯器會自動給枚舉類型加上一個這樣的工廠方法。例如:

          public enum Style {/*...*/}
          
          @GET
          @Path("{name}")
          public Movie getXxx(@PathParam("name") Style style) {
              // JAX-RS 已自動調用 style = Style.valueOf(name)
              // ...
          }
              

          類型參數滿足前兩個條件的 List<T>Set<T>SortedSet<T>

          這條規則適用于多值參數,例如查詢參數:

          @GET
          @Path("xxx")
          public Movie getXxx(@QueryParam("style") Set<Style> styles) {
              // JAX-RS 已自動轉換每個 Style 對象并組裝到 Set 中
              // ...
          }
              

          轉換失敗的處理

          如果轉換失敗,JAX-RS 會根據情況自動拋出一個包裝了初始異常,但是帶不同 HTTP 錯誤碼的 WebApplicationException:對矩陣參數(@MatrixParam)、查詢參數 (@QueryParam)或路徑參數(@PathParam)來說為 HTTP 404 找不到,而對頭部參數(@HeaderParam)或 Cookie 參數(@CookieParam)為 HTTP 400 錯誤請求


          評論

          # re: JAX-RS 從傻逼到牛叉 7:注入參數的自動類型轉換  回復  更多評論   

          2012-01-13 14:00 by danyili
          請教一下博主,怎么在jax-rs上加上安全認證?

          # re: JAX-RS 從傻逼到牛叉 7:注入參數的自動類型轉換  回復  更多評論   

          2012-01-13 15:45 by 蜀山兆孨龘
          @danyili

          JAX-RS 可以和容器管理的安全認證無縫集成,只需要編輯 web.xml 的相關配置,例如 security-constraint,然后在 JAX-RS 類中用 @RolesAllowed 指定允許訪問的角色就可以了。HTTPS 也是完全支持的。

          建議你先了解下 Java EE 安全方面的功能。
          主站蜘蛛池模板: 辽阳市| 绿春县| 柏乡县| 营山县| 大渡口区| 枝江市| 汉阴县| 蓝田县| 平潭县| 陆丰市| 永城市| 宝鸡市| 朝阳区| 汉寿县| 千阳县| 乌苏市| 永靖县| 南京市| 如皋市| 积石山| 子洲县| 武陟县| 都江堰市| 星子县| 克山县| 屯门区| 道孚县| 平顺县| 葫芦岛市| 洪江市| 靖江市| 金阳县| 嘉祥县| 万安县| 渭源县| 绵阳市| 阜新市| 十堰市| 彝良县| 临洮县| 白沙|