java - Resteasy 没有找到 ExceptionMapper 提供者

标签 java rest jax-rs resteasy provider

我已经尝试了很多方法来使这项工作有效,但无论如何都行不通。另外,我找不到关于此的适当文档。 我正在尝试为我的 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/

相关文章:

java - 运行时错误 - JSAPI HelloWorld 程序

java - 使用 PowerMockito 1.6 验证静态方法调用

java - 使用 Jetty : URI is too large >8192 增加限制

javascript - ember 数据序列化程序数据映射

glassfish - 尝试获取 JSON 响应时无法初始化类 org.eclipse.persistence.jaxb.BeanValidationHelper

jakarta-ee - 无法在 JAX-RS 服务中注入(inject) @ApplicationScoped bean

java - hibernate 中不区分大小写的搜索

java - ScheduledExecutorService 和 Shutdown Hook

c# - 如何在 C# 中创建 xAPI (Tin Can) LRS (Learning Record Store)

java - 如何使用 Geoserver 部署现有的 REST 服务