gpt4 book ai didi

java - Resteasy 没有找到 ExceptionMapper 提供者

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:35 25 4
gpt4 key购买 nike

我已经尝试了很多方法来使这项工作有效,但无论如何都行不通。另外,我找不到关于此的适当文档。我正在尝试为我的 CustomException 类型实现一个 CustomExceptionMapperCustomException 被正确抛出,但未被捕获。

我认为使用 @Provider 注释 CustomExceptionMapper 就足够了,但未检测到。我试图允许在 web.xml 中进行扫描,但我发现了这个:https://issues.jboss.org/browse/AS7-1739 .我正在使用 7.0.1 Final。可能解决方案是更改版本,但这个决定不取决于我。

我还发现您可以尝试覆盖 getClasses()getSingletons 方法并在其中添加您的 CustomExceptionMapper,但它是只是没有检测到它。

我的 Application 类是这样的:

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

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


@ApplicationPath("/service")
public class MyApp extends Application {

@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(TestExceptionMapper.class);
return classes;

}
}

和映射器

@Provider
public class TestExceptionMapper implements ExceptionMapper<TestException> {

public Response toResponse(TestException ex) {
//something, but I cannot reach it.
}
}

Web.xml

 <context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.mycompany.rest.exceptions.TestExceptionMapper</param-value>
</context-param>


<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
<param-value>com.mycompany.rest.application.myApplication</param-value>
</init-param>
</servlet>

以及通过 URL 调用的服务:

@Stateless
@Path("/somePath")
public class someService {

@GET //this should be post, but for testing I'm using get
@Path("/some/update/someth")
@Produces()
public String updateSometh(@NotNull @QueryParam("key") String key, @QueryParam(value = "somethID") Long somethID) throws TestException {
// ....
}

如果您使用正确的参数调用它,它就会起作用。但是如果你输入了一个错误的参数,它就不会。
我也想说该应用程序正在运行,但我只是想添加映射器。

最佳答案

异常映射器适用于从资源方法主体抛出的异常。如果您修改资源以抛出 TestException:

public String updateSometh(@NotNull @QueryParam("key") String key, 
@QueryParam(value = "somethID") Long somethID) throws TestException {
throw new TestException();
}

映射器应该捕获异常。问题出在您的测试方式上。

关于java - Resteasy 没有找到 ExceptionMapper 提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12528024/

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