一般 Rest 接口如何传递数组参数?
需要传递数组参数的情况,如果是一般的 form 表单,可以直接定义参数类型为 List<String>即可(不能定义为数组类型,否则只能得到一个 null)。示例代码如下:Java 代码
- @POST
- @Path(“/user” )
- public Response createUser(@FormParam(“username” ) String username,
- @FormParam( “keyword”) List<String> keywords) {
文件上传接口如何传递数组参数?但是如果是上传文件的接口,因为使用了@FormDataParam 注解,则不能使用上述用法:Java 代码
- @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 对象中可以取得参数:Java 代码
- @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 );
- }
- }