【问题标题】:How to pass InputStream datatype as a parameter for Quarkus Restful API resource service?如何将 InputStream 数据类型作为参数传递给 Quarkus Restful API 资源服务?
【发布时间】:2022-12-10 20:05:54
【问题描述】:

我正在使用 Java 和 Quarkus 框架开发一个 REST 网络服务。我想将 InputStream 作为数据类型传递给我的 Rest Resource 方法,因为应用程序执行的方法只接受 InputStream 作为输入。

当我将数据类型设置为 String 然后将其转换为 InputStream 时,一切正常,但唯一的问题是我每次都需要在代码中转换来自 String->InputStream 的输入。

我想知道是否可以接受 InputStream 本身作为 Rest Resource API 方法的数据类型,这样我就可以避免从 String 到 InputStream 的转换。当我这样做时,我只能选择读取我的 Swagger-UI 中的文件,并且由于 InputStream 数据类型,方法也不会执行。

以下是我拥有的当前代码,它运行良好:

@Path("/api")
public class ConverterResource {

    @POST
    @Path("/converter")
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces(MediaType.APPLICATION_JSON)
    public List<String> fileConverter(@HeaderParam("Content-Type") final String contentType, final String inputDocument) {
        final InputStream inputDocumentStream = new ByteArrayInputStream(inputDocument.getBytes(StandardCharsets.UTF_8));
        final TestClass testClass = new TestClass();
        return contentType.equals("application/xml") ? testClass.xmlConverter(inputDocumentStream) : eventHashGenerator.jsonConverter(inputDocumentStream);
    }
}

我想实现这样的事情,这样可以避免转换:

@Path("/api")
public class ConverterResource {

    @POST
    @Path("/converter")
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Produces(MediaType.APPLICATION_JSON)
    public List<String> fileConverter(@HeaderParam("Content-Type") final String contentType, final InputStream inputDocumentStream) {
        //final InputStream inputDocumentStream = new ByteArrayInputStream(inputDocument.getBytes(StandardCharsets.UTF_8));
        final TestClass testClass = new TestClass();
        return contentType.equals("application/xml") ? testClass.xmlConverter(inputDocumentStream) : eventHashGenerator.jsonConverter(inputDocumentStream);
    }
}

我对 Quarkus 很陌生,所以不确定它是否可能或者我做错了什么。任何帮助或建议都会非常有帮助。非常感谢。

【问题讨论】:

    标签: java rest post quarkus quarkus-rest-client


    【解决方案1】:
    1. 为多部分支持添加依赖

      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy-multipart</artifactId>
      
    2. 像这样写你的资源:

      @Path("/api")
      public class ConverterResource {
      
          @POST
          @Path("/converter")
          @Consumes(MediaType.MULTIPART_FORM_DATA)
          @Produces(MediaType.APPLICATION_JSON)
          public List<String> fileConverter(@HeaderParam("Content-Type") final String contentType, @MultipartForm MultipartFormDataInput multipartInput) {
              final InputStream inputDocumentStream = multipartInput.getFormDataPart("file", InputStream.class, null);
              final TestClass testClass = new TestClass();
              return contentType.equals("application/xml") ? testClass.xmlConverter(inputDocumentStream) : eventHashGenerator.jsonConverter(inputDocumentStream);
          }
      }
      

      希望这对你有帮助

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2015-06-03
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多