在Liberty上使用JAX-RS 2.0,我想爲各種javax.ws.rs.WebApplicationException
子類實現一些自定義異常處理,例如javax.ws.rs.NotAllowedException
用於405 Method Not Allowed用例。Liberty中的NotAllowedException的ExceptionMapper
我創建了一個ExceptionMapper
實現:
import javax.ws.rs.NotAllowedException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@Provider
public class NotAllowedMapper implements ExceptionMapper<NotAllowedException> {
@Override
public Response toResponse(NotAllowedException e) {
return Response.status(Response.Status.METHOD_NOT_ALLOWED).entity("Method Not Allowed")
.build();
}
}
並把它添加到我的javax.ws.rs.core.Application
子類:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/v1.0")
public class JaxRsApplication extends Application {
/* Other classes and singletons redacted */
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();
/* ExceptionMappers for custom exception handling */
singletons.add(new NotAllowedMapper());
return singletons;
}
}
然而,發出GET請求,只支持員額端點時,我取回默認的405響應,沒有我的自定義實體有效載荷。
在生成的警告消息:
[警告] javax.ws.rs.ClientErrorException:HTTP 405不允許的方法...
我看到一個javax.ws.rs.ClientErrorException
被拋出,而不是javax.ws.rs.NotAllowedException
。
創建ExceptionMapper
實施ClientErrorException
給我控制指定像我想要一個自定義的響應,但我寧願沒有做某種如果結構或開關結構上的狀態代碼來處理通用ClientErrorException
小號正確。
是否有原因導致ClientErrorException
被拋出,而不是NotAllowedException
?或者更好的是,是否需要某種配置來獲得NotAllowedException
以及其他更具體的異常(如果適用)?
我覺得你的供應商忽略了@Produces(MIMETYPE)註釋。 – Ben
@Ben我嘗試添加正確的Produces註釋而沒有任何運氣。我還沒有看到使用Produces註釋的ExceptionMapper Provider的任何例子,但它值得一試。 – austinbruch