gpt4 book ai didi

java - Jersey ExceptionMapper,依赖另一个ExceptionMapper

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:04 29 4
gpt4 key购买 nike

我有一个ExceptionMapper,它是通用公共(public)库的一部分:

@Provider
public class GenericExceptionMapper implements ExceptionMapper<GenericException> {
...
}

现在,在我的特定项目中,我有自己的ExceptionMapper:

@Provider
public class SomeAdHocExceptionMapper implements ExceptionMapper<SomeAdHocException> {
...
}

我想将 SomeAdHocException 转换为 GenericException 并让 GenericExceptionMapper 负责进一步处理。我尝试了以下两个选项,但都不起作用:

[1] 在 SomeAdHocExceptionMapper 中抛出 GenericException:

@Provider
public class SomeAdHocExceptionMapper implements ExceptionMapper<SomeAdHocException> {
public Response toResponse(SomeAdHocException e) {
throw new GenericException(e);
}
}

[2] 将 GenericExceptionMapper 注入(inject) SomeAdHocExceptionMapper:

@Provider
public class SomeAdHocExceptionMapper implements ExceptionMapper<SomeAdHocException> {
@Inject
private GenericExceptionMapper mapper;

public Response toResponse(SomeAdHocException e) {
return mapper.toResponse(new GenericException(e));
}
}

两个选项都给出依赖项异常(exception)。

如何解决这个问题?

最佳答案

您的第一次尝试将不起作用,因为单个请求只能调用一个异常映射器。这是一项安全功能,可确保我们不会陷入无限循环。想象一下,XExceptionMapper 在处理期间抛出 YException,而 YExceptionMapper 在处理期间抛出 XException

您的第二次尝试将不起作用,因为映射器不可注入(inject)。不过,您可以只是实例化它。

@Provider
public class SomeAdHocExceptionMapper implements ExceptionMapper<SomeAdHocException> {

private final GenericExceptionMapper mapper = new GenericExceptionMapper();

public Response toResponse(SomeAdHocException e) {
return mapper.toResponse(new GenericException(e));
}
}

假设有这样一个构造函数,并且通用映射器不需要它自己的任何注入(inject)。如果是这样,您可以使映射器可注入(inject)。

public class AppConfig extends ResourceConfig {
public AppConfig() {
register(new AbstractBinder() {
@Override
protected void configure() {
bindAsContract(GenericExceptionMapper.class);
}
});
}
}

然后你就可以注入(inject)它了。

关于java - Jersey ExceptionMapper,依赖另一个ExceptionMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43790473/

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