[英]Resteasy does not find ExceptionMapper provider
我已經嘗試了很多東西來完成這項工作,但它無論如何都沒有用。 另外,我沒有找到關於此的適當文檔。 我試圖為我的CustomException
類型實現一個CustomExceptionMapper
。 正確拋出CustomException
,但它沒有被CustomException
。
我認為,詮釋着CustomExceptionMapper
與@Provider
已經足夠了,但狀態並沒有檢測到。 我試圖允許在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;
}
}
和Mapper
@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 {
// ....
}
如果用正確的參數調用它,它就可以工作。 但是如果你輸入一個錯誤的參數,它就不會。
我也想說應用程序正在運行,但我只是想添加Mappers。
您的web.xml是否具有resteasy提供程序的context-param?
這樣的事情
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>packagename.TestExceptionMapper</param-value>
</context-param>
異常處理程序適用於從資源方法主體拋出的異常。 如果您修改資源以拋出TestException
:
public String updateSometh(@NotNull @QueryParam("key") String key,
@QueryParam(value = "somethID") Long somethID) throws TestException {
throw new TestException();
}
映射器應該捕獲異常。 問題出在你測試的方式上。
您還可以通過重寫classes()方法在javax.ws.rs.core.Application類中注冊自定義ExceptionMapper,如下所示:
@ApplicationPath("/api")
public class RestApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
// other resource classes ...
classes.add(CustomExceptionMapper.class);
return classes;
}
}
ExceptionMapper本身可以使用java.lang.Exception作為Type參數來處理任何類型的異常。
@Provider
public class CustomExceptionMapper implements ExceptionMapper<Exception> {
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.