如何解决如何使用微配置文件记录内部错误
假设以下代码是用 Quarkus 编写的。但也可以和 micronaut 一起使用。
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@APIResponses(
value = {
@APIResponse(
responseCode = "201",description = "Customer Created"),@APIResponse(
responseCode = "400",description = "Customer already exists for customerId")
}
)
public Response post(@Valid Customer customer) {
final Customer saved = customerService.save(customer);
return Response.status(Response.Status.CREATED).entity(saved).build();
}
客户定义包括一个字段pictureUrl。 CustomerService 负责验证 URL 是有效的 URL 并且图像确实存在。
这意味着服务将处理以下异常:MalformedURLException 和 IOException。 CustomerService 捕获这些错误并抛出特定于应用程序的异常以报告图像不存在或路径不正确:ApplicationException。
我的研究表明我必须实现以下形式的异常映射器:
public class ApplicationExceptionMapper implements ExceptionMapper<NotFoundException> {
@Override
@APIResponse(responseCode = "404",description = "Image not Found",content = @Content(
schema = @Schema(implementation = Customer.class)
)
)
public Response toResponse(NotFoundException t) {
return Response.status(404,t.getMessage()).build();
}
}
一旦我有了这样的映射器,框架就会知道如何将我的异常转换为响应。我的分析正确吗?最佳做法是什么?
解决方法
你或多或少指向了正确的方向,你的问题可以分为两个,让我分别回答:
- 如何使用 microprofile openapi 记录错误: 使用 api 响应和操作描述是您正在做的正确方法,您可以包含错误的扩展描述和特定的 Http 错误如果需要,与每个相关联的代码。此注释应出现在 Rest Resource 中,而不是 ExceptionMapper 中。
- 使用微配置文件或仅使用 Jax-RS 处理异常的方式处理自定义错误: 使用 Jax-RS API 实现的端点知道如何自动处理 WebApplicationExceptions,通过启动一个自定义异常具有这个我们的父级,Jax-RS 实现将自动知道如何将您的异常映射到响应。
- 处理意外异常或自定义某些异常的响应:通过实现接口 ExceptionMapper,您可以根据需要进一步自定义特定异常的响应生成,但这通常不是必需的。
处理您所解释的场景的一个常见的好策略是使用一系列自定义异常来扩展 WebApplicationException,您可以在其中指定响应代码和消息,或者只使用 jax-rs 提供的那些。如果您需要使用 i18n 支持进行进一步自定义,或者需要为响应实体提供与错误相关的详细信息很重要,那么请实现 ExceptionMapper。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。