【发布时间】:2020-10-09 23:22:00
【问题描述】:
问题的简短版本:
使用 Jersey,如何在运行时确定 @Produces 类型?
问题的详细版本:
我使用 jersy 编写了一个 REST 调用,如下所示:
@GET
@Path("/getVideo")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_OCTET_STREAM, MediaType.APPLICATION_JSON})
public Response getAllVideos(@QueryParam("videoID") Long videoID) throws ApiException, SQLException {
--some code--
Response r ...;
return r;
}
如果用户提供了有效的videoID,那么这应该返回一个mp4 文件,因此返回@Produces({MediaType.APPLICATION_OCTET_STREAM,。但是,如果抛出异常,例如提供错误的videoID,我想返回一个描述异常的json。
它目前的工作方式是,如果提供了有效的 ID,它会返回一个带有 mp4 文件的 200。但如果抛出异常,它会以500 和消息Could not find MessageBodyWriter for response object of type: com.my.package.Errors$CustomError of media type: application/octet-stream 进行响应。
基于the Jersey documentation,响应的返回类型由请求的accept 类型决定。
我的问题是我事先不知道,在发送请求时我想要返回什么类型的响应(因为我希望请求会成功)。相反,我想根据是否引发异常来确定运行时的响应类型。
我该怎么做?
(我认为我的问题类似于this question,但我没有使用 Spring)。
【问题讨论】: