gpt4 book ai didi

jax-rs - Liberty 中 NotAllowedException 的 ExceptionMapper

转载 作者:行者123 更新时间:2023-12-01 15:53:33 27 4
gpt4 key购买 nike

在 Liberty 上使用 JAX-RS 2.0,我想为各种 javax.ws.rs.WebApplicationException 子类(例如 javax.ws.rs)实现一些自定义异常处理。 405 方法不允许用例的 NotAllowedException

我创建了一个 ExceptionMapper 实现:

import javax.ws.rs.NotAllowedException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class NotAllowedMapper implements ExceptionMapper<NotAllowedException> {

@Override
public Response toResponse(NotAllowedException e) {
return Response.status(Response.Status.METHOD_NOT_ALLOWED).entity("Method Not Allowed")
.build();
}

}

并将其添加到我的 javax.ws.rs.core.Application 子类中:

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/v1.0")
public class JaxRsApplication extends Application {

/* Other classes and singletons redacted */
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();

/* ExceptionMappers for custom exception handling */
singletons.add(new NotAllowedMapper());

return singletons;
}
}

但是,当向仅支持 POST 的端点发出 GET 请求时,我得到默认的 405 响应,没有我的自定义实体负载。

在生成的警告消息中:

[WARNING ] javax.ws.rs.ClientErrorException: HTTP 405 Method Not Allowed...

我看到正在抛出 javax.ws.rs.ClientErrorException,而不是 javax.ws.rs.NotAllowedException

ClientErrorException 创建一个 ExceptionMapper 实现让我可以控制指定自定义响应,但我宁愿不必做某种 if-structure或状态代码上的开关结构以正确处理通用 ClientErrorException

抛出 ClientErrorException 而不是 NotAllowedException 是否有原因?或者更好的是,是否需要某种配置来获取 NotAllowedException 以及抛出的其他更具体的异常(如果适用)?

最佳答案

简短的回答是否定的,(目前)无法配置 Liberty 以抛出更具体的 NotAllowedException。

Liberty 使用 Apache CXF 作为底层 JAX-RS 实现,我快速浏览了源代码,唯一对 NotAllowedException 的引用是在 JAX-RS 客户端代码中,这对您在服务器中没有帮助.查看服务器端代码,修改 CXF 以抛出 NotAllowedException 而不是 ClientErrorException 应该不难。 Liberty 组织会定期从 CXF 社区获取更新,因此如果您在 CXF 中打开 JIRA 请求,我们可以进行更改并将其引入即将发布的 Liberty 修复包。

您可以在此处打开 CXF JIRA: https://issues.apache.org/jira/browse/CXF/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel

希望这对你有帮助,安迪

关于jax-rs - Liberty 中 NotAllowedException 的 ExceptionMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442060/

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