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
相关产品推荐
相关产品推荐

