gpt4 book ai didi

java - 如何拦截 Apache CXF Servlet 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:46 26 4
gpt4 key购买 nike

我使用 Apache CXF 开发了一个 REST 服务,我注意到如果我在 URL 中发送无效字符,CXF servlet 在到达我的代码之前会抛出以下异常:

Servlet failed with Exception
java.lang.IllegalArgumentException
at java.net.URI.create(URI.java:841)
at org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:49)
at org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:73)
at org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:82)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:162)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:239)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:164)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:215)

这会导致向客户端返回 500 状态代码。

理想情况下,我想拦截此异常并向客户端返回 400 Bad Request 状态代码,但我无法弄清楚如何执行此操作。

非常感谢任何帮助!

非常感谢

最佳答案

我这样做的方式是通过拦截器。如果在请求的初始处理期间发生错误,则框架响应(当然还有状态代码)将放在消息管道上。因此,例如,您可以在“marshall”阶段编写一个拦截器,检查是否已经有响应并重写为您自己的响应。

@Override
public void handleMessage(Message message) throws Fault {

if (message.getExchange().get(Response.class) != null) {
//build your response and put it on the exchange
message.getExchange().put(Response.class, yourResponse);
}

关于java - 如何拦截 Apache CXF Servlet 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17131344/

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