使用 RESTEasy 的休息客户端的可选响应主体

问题描述

我正在为 Quarkus 编写 POC。我正在使用此 quick start guide 来构建 REST 客户端。我将要集成的 REST 服务是第三方的。这是我当前实现的一个简单示例:

@Path("/v1")
@RegisterRestClient
public class EmployeeApi {

    @POST
    @Path("/employees")
    ApiResponse createEmployee(@RequestBody Employee employee)
}

这很好用。我遇到的问题是第三方 API 将根据成功/失败返回响应正文。在它确实失败的情况下,它会在响应正文 (ApiResponse) 中提供有关失败原因的详细信息。当它成功时,它什么都不返回。这会导致 Quarkus 抛出以下异常:
javax.ws.rs.ProcessingException: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/octet-stream and type com.test.app.ApiResponse

我尝试将 ApiResponse 包装在 Optional 类型中,但没有解决问题。我在 Quarkus / RESTEasy 文档中完全看不到任何表明解决方法内容

我想知道我是否应该改javax.ws.rs.core.Response

解决方法

问题是 JaxRS 试图使 ApiResponse 适合默认返回类型 application/octet-stream

您应该确保明确指定您要返回 application/json

这可以在您的服务之上使用 @Produces(APPLICATION_JSON)


这是正确的代码片段

@Path("/v1")
@RegisterRestClient
public class EmployeeApi {

    @POST
    @Path("/employees")
    @Produces(APPLICATION_JSON)
    ApiResponse createEmployee(@RequestBody Employee employee)
}