我目前正尝试通过我的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。
谢谢你的帮助
1条答案
按热度按时间v7pvogib1#
就像VGR所说的。问题是调用者没有使用text/html。我在swaggerui中测试过,并将其设置为“text/html”。按预期工作。之前是application/json,原因是只使用application json作为生成注解。