【发布时间】:2012-09-13 17:28:50
【问题描述】:
我已经尝试了很多方法来完成这项工作,但无论如何它都不起作用。另外,我没有找到有关此的适当文档。
我正在尝试为我的CustomException 类型实现CustomExceptionMapper。 CustomException 被正确抛出,但未被捕获。
我认为用@Provider 注释CustomExceptionMapper 就足够了,但它没有被检测到。
我试图允许在 web.xml 中进行扫描,但我发现了这个:https://issues.jboss.org/browse/AS7-1739。我正在使用 7.0.1 最终版。可能解决方案是更改版本,但这个决定不取决于我。
我还发现您可以尝试覆盖 getClasses() 或 getSingletons 方法并在那里添加您的 CustomExceptionMapper,但它只是没有检测到它。
我的应用程序类的样子:
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? -
我正在测试当我将 Long 参数设置为错误值(例如 120sd 而不是数字)时会发生什么。那里抛出异常,因为无法解析。
-
请显示资源代码你在哪里做这个测试。我怀疑那里有问题,因为我的配置与您的配置非常相似,并且异常映射器工作正常。
标签: java rest jax-rs resteasy provider