首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用microprofile记录内部错误

如何使用microprofile记录内部错误
EN

Stack Overflow用户
提问于 2021-06-13 11:12:40
回答 1查看 42关注 0票数 0

假设下面的代码是用Quarkus编写的。但也可以和micronaut在一起。

代码语言:javascript
复制
@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负责验证网址是否有效,以及图像是否确实存在。

这意味着服务将处理以下异常: MalformedURLException和IOException。CustomerService捕获这些错误并抛出特定于应用程序的异常,以报告映像不存在或路径不正确: ApplicationException。

如何使用microprofile记录此错误情况?

我的研究表明,我必须实现如下形式的异常映射器:

代码语言:javascript
复制
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();
    }

}

一旦我有了这样的映射器,框架就会知道如何将我的异常转换为响应。我的分析正确吗?最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-06-17 22:28:38

你或多或少指出了正确的方向,你的问题可以分为两部分,让我分别回答这两个问题:

使用microprofile openapi来记录错误:使用api响应和操作描述是正确的方式,如果您愿意,您可以包括错误的扩展描述和与每个错误相关的特定

  1. How错误代码。这些注释应该出现在Rest资源中,而不是出现在带有微配置文件的ExceptionMapper.
  2. Handling自定义错误中,或者仅仅是Jax-RS处理异常的方式: Response.
  3. Dealing使用Jax-RS 实现的端点知道如何自动处理WebApplicationExceptions,通过启动具有这一个用户父级的自定义异常,Jax-RS实现将自动知道如何将您的异常映射到具有意外异常的Apis或自定义对某些异常的响应:通过实现接口ExceptionMapper,如果需要,您可以进一步自定义特定异常的响应生成,但这通常不是必需的。

处理您已经解释过的场景的一种常见的好策略是,使用一系列自定义异常来扩展WebApplicationException,您可以在其中指定响应代码和消息,或者只使用jax-rs提供的异常。如果您需要使用i18n支持进行进一步的自定义,或者需要为响应实体提供与错误相关的详细信息,那么可以实现ExceptionMapper。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67954509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档