【发布时间】:2016-11-01 10:42:30
【问题描述】:
是否可以在BadRequestException 中包含一条消息,以便当用户看到响应代码 400 时,他/她也可以找出原因?
场景大概是这样的,经过简化:
public Entity getEntityWithOptions(@PathParam("id") String id, @QueryParam("option") String optValue) {
if (optValue != null) {
// Option is an enum
try {
Option option = Option.valueOf(optValue);
} catch (IllegalArgumentException e) {
throw new BadRequestException(e.getMessage());
}
return new Entity(option);
}
return new Entity();
}
我知道这可以通过返回 Response 对象来完成,但我不希望这样。
这可能吗?也许是ExceptionMapper<BadRequestException>?或者因为BadRequestException 已经是泽西岛特有的例外,所以无法做到这一点?
【问题讨论】:
-
我认为消息可以放入构造函数中,对吧?并且如果使用了exceptionMapper,它实际上会返回一个Response。
-
我正在将消息传递给构造函数,但响应中不包含它。
-
如果使用了 exceptionMapper,则显示传递给构造函数的消息。只需像这样制作映射器: public Response toResponse(BadRequestException e) { return Response.status(Response.Status.BAD_REQUEST).type(MediaType.TEXT_PLAIN).entity(ExceptionUtils.getStackTrace(e)).build();}
标签: java web-services http jersey jax-rs