RESTful 一種軟件架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用于客戶端和服務器交互類的軟件。基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現緩存等機制。
需要傳遞數組參數的情況,如果是一般的form表單,可以直接定義參數類型為List<String>即可(不能定義為數組類型,否則只能得到一個null)。
示例代碼如下:
1
2
3
4
|
@POST @Path( "/user" ) public Response createUser(@FormParam( "username" ) String username, @FormParam( "keyword" ) List<String> keywords) { |
文件上傳接口如何傳遞 數據 參數?
但是如果是上傳文件的接口,因為使用了 @FormDataParam 注解,則不能使用上述用法:
1
2
3
4
5
6
7
|
@POST @Path( "/upload" ) @Consumes(MediaType.MULTIPART_FORM_DATA ) public Response uploadFile(@FormDataParam ( "filename" ) String filename, @FormDataParam( "file" ) InputStream uploadedInputStream, @FormDataParam( "file" ) FormDataContentDisposition fileDetail , @FormDataParam( "keyword" ) final List<String> keywords) { |
訪問這個接口時會發生異常:
java.lang.IllegalArgumentException : wrong number of arguments
可見使用 @FormDataParam 注解時,將參數類型定義成List<String>是不行的,可以定義成 List<FormDataBodyPart> ,從 FormDataBodyPart對象中可以取得參數:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@POST @Path( "/upload" ) @Consumes(MediaType.MULTIPART_FORM_DATA ) public Response uploadFile(@FormDataParam( "filename" ) String filename, @FormDataParam( "file" ) InputStream uploadedInputStream, @FormDataParam( "file" ) FormDataContentDisposition fileDetail , @FormDataParam( "keyword" ) final List<FormDataBodyPart> keywordObjs ) { if (keywordObjs != null && ! keywordObjs.isEmpty()) { for (FormDataBodyPart keywordObj : keywordObjs) { String keyword = keywordObj.getValueAs(String.class); System. out.println( "關鍵字:" + keyword ); } } |
RESTful 注解大全
@GET、@POST、@PUT、@DELETE、@HEAD
@GET、@POST、@PUT、@DELETE 以及 @HEAD 均是 HTTP 請求方法指示符注釋。您可以使用它們來綁定根資源或子資源內的 Java 方法與 HTTP 請求方法。HTTP GET 請求被映射到由 @GET 注釋的方法;HTTP POST 請求被映射到由 @POST 注釋的方法,以此類推。
@Conumes 和 @Produces
@Conumes注釋代表的是一個資源可以接受的MIME類型。@Produces注釋代表的是一個資源可以返回的MIME類型。
@Path
@Path注釋被用來描述根資源、子資源方法或子資源位置。value值可以包含文本字符、變量或具有定制正則表達式的變量。