我已经尝试了很多方法来完成这项工作,但无论如何它都不起作用。另外,我没有找到有关此的适当文档。我正在尝试CustomExceptionMapper
为我的CustomException
类型实现一个。被CustomException
正确抛出,但没有被捕获。
我认为用注释CustomExceptionMapper
就@Provider
足够了,但它没有被检测到。我试图允许在 web.xml 中进行扫描,但我发现了这个:https ://issues.jboss.org/browse/AS7-1739 。我正在使用 7.0.1 Final。可能解决方案是更改版本,但这个决定不取决于我。
我还发现您可以尝试覆盖getClasses()
orgetSingletons
方法并在那里添加您的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 {
// ....
}
如果你用正确的参数调用它,它就可以工作。但是,如果您输入了错误的参数,则不会。
我也想说应用程序正在运行,但我只想添加映射器。