WebApplicationException

WebApplicationException

JAX-RS球衣句柄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();
    }
}


我有一个试图捕获WebApplicationException的映射器类。但是,此映射器类无法捕获WebApplicationException异常。

有人可以帮我吗?这个BaseExceptionMapper是一个抽象类,它实现ExceptionMapper并生成自定义错误消息,该消息作为Response对象返回。

我不确定我在做什么错。

这是堆栈跟踪。

java.lang.IllegalArgumentException: Invalid siteKey ONE
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:148)
..

最佳答案

对于那些想知道的人,拥有一个通用的抽象异常映射器:

 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();
    }

}

09-04 08:12
查看更多