jenkins Java通过rest API返回输入流,输入流中包含html文件

tp5buhyn  于 2022-12-11  发布在  Jenkins
关注(0)|答案(1)|浏览(212)

我目前正尝试通过我的API返回一个输入流。输入流包含一个html文件,我之前通过Cdancy Jenkins客户端从Jenkins那里获取了这个文件。我想通过我的端点传递这个html。如果我输入Json作为@Produce,那么HTML内容会附带JSON无法解析的注解。如果我指定另一个MediyType,然后返回一个406。返回一个输入流是最好的做法还是应该先将其转换为输出流?
这是我的代码:
终点

@GET
@Path(API_RESOURCE_IMAGE_REPORT)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Operation(summary = "", description = "")
@APIResponses(
        value = {
                @APIResponse(
                        responseCode = "200",
                        description =
                                "",
                        content = @Content(mediaType = MediaType.APPLICATION_JSON)),
                @APIResponse(
                        responseCode = "400",
                        description = "",
                        content =
                        @Content(
                                mediaType = MediaType.APPLICATION_JSON,
                                schema = @Schema(implementation = ErrorResponseDO.class))),
        })
public Response getReport(@Parameter(
        description = "",
        required = true)
                          @PathParam("imageName") final String imageName,
                          @Parameter(description = "", required = true)
                          @PathParam("tag") final String tag,
                          @Parameter(description = "")
                          @PathParam("type") String type
) throws ApplicationException, IOException {

    InputStream report = jenkinsClient.getReport(imageName, tag, type);

    return Response.status(HttpURLConnection.HTTP_ACCEPTED).entity(report).build();
}

Jenkins客户:

public InputStream getReport(final String imageName, final String tag, final String type) throws ApplicationException {

        try {
            final int lastSuccessfulBuildnumber = jenkinsClient.api().jobsApi().jobInfo(imageName, tag).lastSuccessfulBuild().number();
            LOG.info("Last successful buildnumber: " + lastSuccessfulBuildnumber);

            final InputStream report = jenkinsClient.api().jobsApi().artifact(imageName, tag, lastSuccessfulBuildnumber, Objects.equals(type, "image") ? "trivy_image_report.html" : "trivy_Dockerfile_report.html");
            

            if (report == null) {
                throw new NotFoundException();
            }

            return report;

        } catch (Exception e) {
            throw new NotFoundException();

        }
    }

输出:每次输出为406(TEXT_HTML、OCTET_STREAM、TEXT_PLAINE)。只有使用@Produces(MediaType.APPLICATION_JSON)时,html代码芽才能成功,并显示以下消息:无法解析json。
谢谢你的帮助

v7pvogib

v7pvogib1#

就像VGR所说的。问题是调用者没有使用text/html。我在swaggerui中测试过,并将其设置为“text/html”。按预期工作。之前是application/json,原因是只使用application json作为生成注解。

相关问题