jersey框架是一個開源的RESTful的框架,實現了實現了JAX-RS規范,進一步地簡化 RESTful service 和 client 開發。當然而且是必須的,jersey對文件的上傳和下載也是支持的。下面我們就講解怎么基於jersey框架實現文件上傳。
首先我們來看看在jersey框架中常見的用來表示接受數據類型和返回數據類型的注解:
| @GET |
查詢請求 | 相當於數據庫的查詢數據操作 |
| @POST | 插入請求 | 相當於數據庫的插入數據操作 |
| @PUT | 更新請求 | 相當於數據庫的更新數據操作 |
| @DELETE | 刪除請求 | 相當於數據的刪除數據操作 |
| @Path | uri路徑 | 定義資源的訪問路徑,client通過這個路徑訪問資源。比如:@Path("user") |
| @Produces | 指定返回MIME格式 | 資源按照那種數據格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML) |
| @Consumes | 接受指定的MIME格式 | 只有符合這個參數設置的請求再能訪問到這個資源。比如@Consumes("application/x-www-form-urlencoded") |
| @PathParam | uri路徑參數 | 寫在方法的參數中,獲得請求路徑參數。比如:@PathParam("username") String userName |
| @QueryParam | uri路徑請求參數 | 寫在方法的參數中,獲得請求路徑附帶的參數。比如:@QueryParam("desc") String desc |
| @HeaderParam | 請求頭中的參數 | 寫在方法的請求頭中,比如:@HeaderParam("userId") String userid |
| @DefaultValue | 設置@QueryParam參數的默認值 | 如果@QueryParam沒有接收到值,就使用默認值。比如:@DefaultValue("description") @QueryParam("desc") String desc |
| @FormParam | form傳遞的參數 | 接受form傳遞過來的參數。比如:@FormParam("name") String userName |
| @FormDataParam | 通常用在上傳文件的時候 | 客戶端提交form(MIME為multipart/form-data)的方式提交表單,服務端使用@FormDataParam來解析form表單中的參數 |
| @BeanParam | 通過Bean的形式傳遞參數 | 接受client傳遞的bean類型的參數,同時這個bean可以在屬性上配置@FormParam用以解決client的屬性名稱和bean的屬性名稱不一致的問題。比如:@BeanParam User user |
| @Context | 獲得一些系統環境信息 | 通過@Context可以獲得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等 |
| @XmlRootElement | 將bean轉換為xml | 如果要將bean以xml或json的格式返回,必須要這個注解。比如: @XmlRootElement public class User{...} |
如上面的表中所示,通常在文件上傳時,我們在服務端將使用@FormDataParam注解來解析上傳的文件,而在客戶端請求時,需要注意請求頭這時不能有Content-Type, 請求體的類型為form-data。
在服務端的一般格式如下:
1 @POST 2 @Path("/uploadEventCsv") 3 @Consumes({MediaType.MULTIPART_FORM_DATA}) //指定接受類型 4 @Produces(MediaType.APPLICATION_JSON)。 //返回類型 5 6 public WrapResponseModel uploadFile( 7 @HeaderParam("userId") int userId, 8 @FormDataParam("file") InputStream fileInputStream, 9 @FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception { 10 //調用相應的service處理 11 }
注意,在導入FormDataContentDisposition時,應該導入的jar包是:

第一個,切忌不要導錯了。。。。
