【问题标题】:Setting headers and content length and mediatype in a Quarkus REST-SErvice在 Quarkus REST-服务中设置标题和内容长度和媒体类型
【发布时间】:2022-07-22 03:41:07
【问题描述】:

我想将 JAX-RS-REST-Restservice(在 Tomcat 下运行)迁移到 Quarkus。 我可以一路解决我的大部分问题,但我仍然有一个方法的问题。

在此功能中,我执行 OTA 下载(设备固件)。我设置了一些标题、MediaType 和内容长度。

在原始服务中,我的代码如下所示:

public HomeAutomationService
{
    ...
    @Context
    private HttpServletRequest request;
    ...

    @GET
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    @Path("/v1/DownloadFirmware")
    public Response getFirmware()
    {
       ...
       response.setHeader("X-OTA-SIGNATURE", signatureString);
       response.setContentLength((int) file.length());
       response.setContentType(MediaType.APPLICATION_OCTET_STREAM);

       return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM).build();    
    }
}

不幸的是,我在 Quarkus 中找不到类似 HttpServletResponse 的东西。 所以我现在使用一个 ResponseBuilder 来创建一个 Response,我可以根据需要在其中添加标题:

ResponseBuilder 响应构建器;

但是,我不确定如何实例化 ResponseBuilder。有一种方法可以为 ResponseBuilder 设置标头,但我没有找到有关如何设置内容长度和内容类型的任何信息。

我不确定是否必须设置内容类型,因为我已经使用了@Produces-annotation - 但是内容长度呢?是自动设置的吗?如果没有(这就是我的猜测),我该如何正确设置?

感谢您的阅读和回答,

鲁迪

【问题讨论】:

    标签: rest quarkus


    【解决方案1】:

    在这种情况下你不需要使用@Produces,你的返回应该类似于下面的代码:

    return Response.ok(yourFileBytes[])
                    .type(MediaType.APPLICATION_OCTET_STREAM)
                    .header(HttpHeaders.CONTENT_LENGTH, <yourFileLength>)
                    .header(HttpHeaders.CONTENT_DISPOSITION, "inline; ")
                    .build();
    

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 2011-10-27
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多