Jersey开发Restful的文件上传接口如何传递数组参数
程序员文章站
2022-04-28 15:45:43
...
一般Rest接口如何传递数组参数?
需要传递数组参数的情况,如果是一般的form表单,可以直接定义参数类型为List<String>即可(不能定义为数组类型,否则只能得到一个null)。
示例代码如下:
@POST @Path("/user" ) public Response createUser(@FormParam("username" ) String username, @FormParam( "keyword") List<String> keywords) {
文件上传接口如何传递数组参数?
但是如果是上传文件的接口,因为使用了@FormDataParam注解,则不能使用上述用法:
@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对象中可以取得参数:
@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 ); } }
上一篇: PHP 查找字符串常用函数介绍