JAX-RS jersey句柄WebApplicationException
您好,
我尝试使用MyWebApplicationExceptionMapper处理WebApplicationException,但它无法正常工作。
@Path("/v1")
public class MyHandler {
@POST
@Path("/test")
@Consumes({ MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_JSON})
public Response getTouchpointPost(@QueryParam("key") KeyParam KeyParam){
..
}
}
public class KeyParam extends AbstractParam<String> {
public KeyParam(String param) {
super(param);
}
@Override
protected String parse(String param) {
return checkKey(param);
}
private String checkKey(String key) {
// throws IllegalArgumentException if {key expression} is false
com.google.common.base.Preconditions.checkArgument(isValid(key), "Invalid key %s", key);
return key;
}
}
当checkKey()
抛出IllegalArgumentException时,它会被catch块捕获并重新抛出为WebApplicationException。
public abstract class AbstractParam<V> {
// some code
public AbstractParam(@JsonProperty("param") String param) {
// some code
} catch (Exception e) {
LOGGER.warn("Exception decoding parameter", e);
throw new WebApplicationException(onError(param, e));
}
}
@Provider
public class MyWebApplicationExceptionMapper extends
BaseExceptionMapper<WebApplicationException> {
@Override
public int getStatus(WebApplicationException e) {
return e.getResponse().getStatus();
}
}
我有一个mapper类,它试图捕获WebApplicationException。但是这个mapper类无法捕获WebApplicationException异常。
有人可以帮我这个吗?此BaseExceptionMapper是一个抽象类,它实现ExceptionMapper并生成一个自定义错误消息,该消息作为Response对象返回。
我不确定我在这里做错了什么。
这是堆栈跟踪。
java.lang.IllegalArgumentException: Invalid siteKey ONE
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:148)
..
答案 0 :(得分:3)
对于那些想知道,有一个通用的抽象异常映射器:
public abstract class GenericExceptionMapper <E extends Throwable> implements ExceptionMapper<E> {
protected abstract Response handleResponse(E e);
@Override
public Response toResponse(E e) {
return handleResponse(e);
}
}
@Provider
public class UserExceptionMapper extends GenericExceptionMapper<UserException>{
@Override
protected Response handleResponse(UserException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e).build();
}
}