gpt4 book ai didi

exception-handling - Jersey ParamConverter 异常未由 ExceptionMapper 处理

转载 作者:行者123 更新时间:2023-12-04 12:41:25 33 4
gpt4 key购买 nike

每个标题,从 ParamConverter 抛出的异常没有按照我期望的方式处理。

使用 ExceptionMapper:

@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
@Override
public Response toResponse(MyException exception) {
return Response.serverError().entity( "It triggered" ).build();
}
}

和参数转换器:
@Provider 
(boilerplate junk)
@Override
public DateTime fromString(String value) {
throw new MyException("convert");
}

它不会在 500 错误中返回“它触发”文本,而是返回 404。

预期问题:两个提供商都注册了吗?

是 - 如果我从资源(在“常规”代码中)抛出“MyException”,它会按预期工作。我还可以使用“convert”消息转换查看堆栈跟踪。

有什么方法可以让 ExceptionMapper 处理来自 ParamConverters 的异常?

我正在使用 jersey 2.3.1 和 spring-jersey,在码头容器 9.1.0.RC0 中启动

最佳答案

来自阅读 this ,JAX-RS 规范说实现者应该将未处理的异常包装在 NotFoundException 中。 (404) 为 @QueryParam@PathParam ,从我测试 400 的结果来看,(我猜是 BadRequestException )为 @FormParam .

"if the field or property is annotated with @MatrixParam, @QueryParam or @PathParam then an implementation MUST generate an instance of NotFoundException (404 status) that wraps the thrown exception and no entity"



我可以看到处理异常的几种方法是
  • 只需在 ParamConverter 中处理它,例如
    return new ParamConverter<T>() {

    @Override
    public T fromString(String string) {
    try {
    return (T)new MyObject().setValue(string);
    } catch (MyException ex) {
    Response response = Response.serverError().entity("Boo").build()
    throw new WebApplicationException(response);
    }
    }

    @Override
    public String toString(T t) {
    return t.toString();
    }
    };
  • 或者只是让您的异常(exception)扩展 WebApplicationException ,并返回 Response那里。例如
    public class MyException extends WebApplicationException {

    public MyException(String message) {
    super(Response.serverError().entity(message).build());
    }
    }
  • 关于exception-handling - Jersey ParamConverter 异常未由 ExceptionMapper 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825795/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com