使用Resteasy开发的@POST REST服务方法

时间:2015-04-27 14:58:41

标签: java rest java-ee resteasy

我正在开发一个客户端/服务器应用程序。 服务器端我使用Java EE和Resteasy作为库来开发REST Web服务。客户端我编写了一个简单的HTML页面来查询这些后端服务。 我所做的所有服务都正常工作,除了一个@POST服务。

它的代码是:

@OPTIONS
@Override
@POST
@Path("/{id}/jobs")
public void print(@PathParam("id") String deviceId,
    @FormParam("doc") byte[] doc,
    @FormParam("copies") int copies)
{
    ...
}

问题是我从前端发送到后端的字节数组到了,但到达时它是空的。其他输入参数正确到达后端。

我认为这个问题可以解决在方法上定义@Consumes,但我不知道我应该使用哪种“应用程序”类型。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

来自@FormParam文档:

  

带注释的参数的类型T必须:

     
      
  1. 是原始类型
  2.   
  3. 拥有一个接受单个String参数的构造函数
  4.   
  5. 有一个名为valueOf或fromString的静态方法,它接受一个> String参数(例如,参见Integer.valueOf(String))
  6.   
  7. Be List,Set或SortedSet,其中T满足上面的2或3。生成的集合是只读的。
  8.   

答案 1 :(得分:0)

您是否也尝试上传文件?那就是你使用doc byte []参数的原因吧?在这种情况下,你是对的,你需要像这样使用@Consumes注释:

@OPTIONS
@Override
@POST
@Path("/{id}/jobs")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void print(@FormDataParam("doc") InputStream is, 
    @FormDataParam("doc") FormDataContentDisposition formData,
    @PathParam("id") String deviceId,
    @FormParam("copies") int copies)
{
    //code to process your InputStream to get your byte[]
    ...
}

这将是你的HTML:

<form action="yourPath/yourId/jobs" method="post" enctype="multipart/form-data">
   File : <input type="file" name="doc" />
  <br/>
  <input type="submit" value="Submit" />
</form>

importan代码是表单中的“encytype”属性,@ Consumes注释和@FormDataParam用于接收您上传的文件数据。 您可以看到完整的示例here