天天看點

Jersey架構常用注解5:參數擷取注解

JAX-RS标準支援豐富的參數擷取方式,可以擷取查詢參數、表單參數、請求頭、檔案、路徑等各種類型的參數。

@QueryParam

HTTP請求路徑中的

?k1=v1&k2=v2

這樣的鍵值對稱為查詢參數,

@QueryParam

注解用來擷取HTTP位址中的查詢參數。

舉例:假設HTTP通路位址為

http://localhost/user?name=Michale&age=120

,則在方法中可擷取查詢參數。

@Path("/user")
public class UserRes {
    //擷取使用者清單
    @GET
    @Path("")
    @Produces(MediaType.APPLICATION_JSON)
    public String getAll(@QueryParam("name") String name,
                         @QueryParam("age") int age) {
        System.out.println(name);
        System.out.println(age);
        return "name: " + name + " , age: " + age;
    }
}
           

@FormParam

如果HTTP是以

application/x-www-form-urlencoded

的方式送出表單,則使用

@FormParam

注解擷取表單參數。

//建立使用者
    @PUT
    @Path("")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public String add(@FormParam("name") String name,
                      @FormParam("age") int age) {
        return "name: " + name + " , age: " + age;
    }
           
Jersey架構常用注解5:參數擷取注解

@CookieParam

擷取http請求頭中cookie中的參數值。

@HeaderParam

擷取http請求頭中的參數值。

@FormDataParam

通常在上傳檔案的時候,需要

@FormDataParam

。用戶端送出form(MIME為

multipart/form-data

)的方式送出表單,服務端使用@FormDataParam來解析form表單中的參數。

需要注意的是,

@FormDataParam

需要

jersey-media-multipart

依賴庫的支援。在maven中需加入:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.19</version>
</dependency>
           

檔案上傳示例代碼

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail) {
    String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();
    // save it
    writeToFile(uploadedInputStream, uploadedFileLocation);
    String output = "File uploaded to : " + uploadedFileLocation;
    return Response.status(200).entity(output).build();
}
           

@MatrixParam

擷取請求URL中的參數中的鍵值對,必須使用“;”作為鍵值對的分隔符,比如/person/1;id=1;name=bella;age=22。此注解用法比較奇特,在項目中并不推薦使用。

@PathParam

該注解定義路徑的參數資訊,用于指定的URI路徑參數,

@PathParam

用在接收請求的方法的參數上。

關于@PathParam注解,請點選連結檢視。

Jersey架構常用注解2:@Path和@PathParam注解

@DefaultValue

以上大多數參數都可以和

@DefaultVaule

一起使用,為參數指定一個預設值,當請求中不包括該參數時候使用這個預設值。

@Path("/user")
public class UserRes {
    //擷取使用者清單
    @GET
    @Path("")
    @Produces(MediaType.APPLICATION_JSON)
    public String getAll(@QueryParam("name") String name,
                         @QueryParam("age") @DefaultValue("10") int age) {
        System.out.println(name);
        System.out.println(age);
        return "name: " + name + " , age: " + age;
    }
}
           

繼續閱讀