Jersey(javax)REST MissingAnnotationException

我有一个包含多个字段和文件上传的
HTML表单.

Java方面,我收到如下表单,它的工作原理如下:

@Component("org.phenotips.metabolites.FileUploaderResource")
@Path("/metabolites")

public class FileUploaderResource extends XWikiResource

{
  @GET
  @Path("/test")
  public Response test() {
      String response = "<html>Successful</html>";
      return Response.ok(response).build();
  }

  @POST
  @Path("/upload")
  @Consumes(MediaType.MULTIPART_FORM_DATA)
  public Response uploadFile(
      @FormDataParam("filepath") InputStream uploadedInputStream
  )
  {
      try {
          String errorMessage = "This is an error response";
          URI redirect = new URI("http://localhost:8080/");
          return Response.temporaryRedirect(redirect).header("error_msg", errorMessage).build();
      } catch (Exception ex) {
          return Response.serverError().build();
      }
  }
}

但这不是我需要的,例如uploadInputStream包含的内容(示例)

-----------------------------184640265716083967621914753489
Content-Disposition: form-data; name="id"

0000002
-----------------------------184640265716083967621914753489
Content-Disposition: form-data; name="column_order"

yes,  no, 
-----------------------------184640265716083967621914753489
Content-Disposition: form-data; name="date"

05/02/2015
-----------------------------184640265716083967621914753489
Content-Disposition: form-data; name="filepath"; filename="phenotips_2014-08-28_10-35.csv"
Content-Type: text/csv

"History (code)","History","History (code and name)","observed"
"","","","HP:0001622"
-----------------------------184640265716083967621914753489--

正如您所看到的,表单中的文件数量多于文件.
但是,如果我将uploadFile的签名更改为

public Response uploadFile(
    @FormDataParam("date") String date,
    @FormDataParam("filepath") InputStream uploadedInputStream
)

我收到以下错误:

根资源类org.phenotips.metabolites.FileUploaderResource不是有效的根资源类:实体已被读取. 1.参数需要以下注释之一:[interface javax.ws.rs.core.Context,interface javax.ws.rs.HeaderParam,interface javax.ws.rs.MatrixParam,interface javax.ws.rs.QueryParam,接口javax.ws.rs.PathParam,接口javax.ws.rs.CookieParam]

更改为@FormParam(“date”)也没有帮助,因为它最终没有找到并返回NullPointerException

编辑.我喜欢下面答案中提出的猜测.
我确实决定不直接提到一些东西(你可以在代码中看到它) – 我正在使用自定义框架,XWiki.完全有可能读取身体,然后没有什么可读的.

最佳答案 这不是答案:只是看看OP是不是向我们展示或告诉我们的东西

我用Postman测试了这个,我没有问题.也许这是你没有向我们展示的其他东西.

@Path("/multipart")
public class MutlipartResource {
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response postMultiPart(@FormDataParam("date") String date, 
                                  @FormDataParam("filepath") InputStream stream) 
                                                               throws Exception {
        ImageIO.read(stream);
        return Response.ok(date).build();
    }
}

这是我对错误的解释,虽然我可能错了,但这只是猜测.在达到该方法之前,似乎有些东西正在读取身体部位,因此没有什么可以阅读的.在这种情况下,错误可能会说,因为它不是一个可读部分,它不应该被定义为多部分而是另外一些形式,因为你只能有一个实体,日期不能是一个体,而是必须是查询参数,路径参数等(不是实体主体的东西).这只是一个猜测.但也许你可以调查一下.

点赞