`
yunzhu
  • 浏览: 1141018 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
B2b19957-cda7-3a9e-83a0-418743feb0ca
监控应用服务器
浏览量:109087
2e8be8be-e51f-346c-bcdd-12623c9aa820
Web前端开发
浏览量:119248
Bfa5df64-a623-34b9-85b8-ef3ce2aed758
经典异常的解决
浏览量:203983
社区版块
存档分类
最新评论
阅读更多

 

一般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 );
          }
     }

 

 

0
4
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics