【问题标题】:@POST method of REST service developed with Resteasy使用 Resteasy 开发的 REST 服务的 @POST 方法
【发布时间】:2015-04-27 14:58:40
【问题描述】:

我正在开发一个客户端/服务器应用程序。 服务器端我使用 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 可以解决这个问题,但我不知道应该使用哪种“应用程序”类型。有人可以帮助我吗?

【问题讨论】:

    标签: java rest jakarta-ee resteasy


    【解决方案1】:

    来自@FormParam 文档:

    注解参数的类型 T 必须是:

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

    【讨论】:

      【解决方案2】:

      您是否也尝试上传文件?这就是你使用 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>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多