假设使用 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。
你如何用 microprofile 记录这个错误案例?
我的研究表明我必须实现以下形式的异常映射器:
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();
}
}
一旦我有了这样的映射器,框架就会知道如何将我的异常转换为响应。我的分析正确吗?最佳做法是什么?