问题描述
我正在为 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)
}