You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus中ExceptionMapper返回实体被嵌套,如何返回原始实体?

解决Quarkus中ExceptionMapper返回实体被额外包装的问题

这问题我之前也碰到过,根源在于你错误地用Entity.entity()对响应实体做了额外包装——JAX-RS的Response.entity()方法本身就支持直接传入业务实体对象,不需要再套一层Entity,这会导致Quarkus把Entity这个框架对象本身序列化成JSON,也就是你看到的包含entity、variant等冗余字段的结构。

修正方案

直接把你的错误实体对象传给Response.entity(),并单独指定媒体类型(或者把实体和媒体类型一起传入)即可:

@Provider
public class WebhookExceptionMapper implements ExceptionMapper<WebhookException> {
    @Override
    public Response toResponse(final WebhookException e) {
        return Response.status(e.getError().getCode().getStatus())
                .entity(e.getError()) // 直接传入错误实体,无需Entity包装
                .type(MediaType.APPLICATION_JSON) // 指定响应的媒体类型
                .build();
    }
}

或者也可以用更简洁的写法,把实体和媒体类型合并到一个entity()调用里:

return Response.status(e.getError().getCode().getStatus())
        .entity(e.getError(), MediaType.APPLICATION_JSON)
        .build();

效果说明

修改后,Quarkus会直接序列化你的Error实体对象,返回你期望的响应格式:

{
    "code": "SOME_ERROR_CODE",
    "msg": "Error message"
}

内容的提问来源于stack exchange,提问作者Jens Borch Christiansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:27:50