在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