Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAX-RS(泽西岛实现)例外Apper<;可丢弃>;不是';t捕获ConstraintViolationException_Java_Jersey_Exceptionmapper - Fatal编程技术网

Java JAX-RS(泽西岛实现)例外Apper<;可丢弃>;不是';t捕获ConstraintViolationException

Java JAX-RS(泽西岛实现)例外Apper<;可丢弃>;不是';t捕获ConstraintViolationException,java,jersey,exceptionmapper,Java,Jersey,Exceptionmapper,我有一个exceptionapper作为提供者来处理我的所有异常 很明显,我的类实现了ExceptionMapper,我们知道,所有异常都以某种方式扩展了Throwable 现在我使用jax-rs@NotNull检查我的资源输入值是否为非null,通过一些搜索,我意识到当注释字段为null时,它将抛出ConstraintViolationException 因此,我尝试处理它,并在我的ExceptionMapper中为响应添加一些细节(添加一些自定义json模型),如下所示: @Provider

我有一个
exceptionapper
作为
提供者
来处理我的所有异常

很明显,我的类实现了
ExceptionMapper
,我们知道,所有异常都以某种方式扩展了
Throwable

现在我使用jax-rs
@NotNull
检查我的资源输入值是否为非null,通过一些搜索,我意识到当注释字段为null时,它将抛出
ConstraintViolationException

因此,我尝试处理它,并在我的ExceptionMapper中为响应添加一些细节(添加一些自定义json模型),如下所示:

@Provider
public class AllExceptionMapper implements ExceptionMapper<Throwable> {

    private final Logger logger = LogManager.getLogger(AllExceptionMapper.class);

    @Override
    public Response toResponse(Throwable ex) {
        Response response;
        CustomError error;
        // handle some errors

        else if (ex instanceof ConstraintViolationException) {
             error = new CustomError(
                 324, // predefined error type in our documents
                 "some details"
             );
             response = Response.status(Response.Status.BAD_REQUEST).entity(error).build();
        }

        // handle some other errors

        return response;
    }

}
@Provider
公共类AllExceptionMapper实现ExceptionMapper{
私有最终记录器Logger=LogManager.getLogger(AllExceptionMapper.class);
@凌驾
公众对响应的响应(可丢弃的ex){
反应;
自定义错误;
//处理一些错误
else if(例如ConstraintViolationException的实例){
error=新自定义错误(
324,//文档中预定义的错误类型
“一些细节”
);
response=response.status(response.status.BAD_请求).entity(error.build();
}
//处理其他一些错误
返回响应;
}
}
问题是这不起作用,但是如果我创建另一个实现
ExceptionMapper
的异常映射器提供程序并在那里处理它,它就可以毫无问题地工作

正如我之前所说(也检查过)所有异常都是从
Throwable
类扩展而来的,所以我遗漏了什么,为什么它不工作


所谓不工作,我的意思是它忽略了我的映射器(从
ExceptionMapper
实现的映射器),并具有正常行为,即返回状态代码400而没有响应负载,就像根本没有映射器一样
ExceptionMapper
的工作方式,就是说,您可以创建一个通用的
ExceptionMapper
,它处理所有错误。然后您可以创建更具体的
ExceptionMapper
s,以另一种方式处理更具体的错误。所有这些都分为不同的类别

事实上,在一个单独的类中进行此操作对您很有效,这让我相信,在某个地方有一个更具体的
ExceptionMapper
,它会在您可以处理异常之前处理该异常


ExceptionAppers的使用方式实际上非常干净,并且可以保持代码的干净。想要将代码放在一个中心位置,将导致一个巨大的
如果

这是什么意思?当前的行为是什么?@SBylemans它忽略了我的映射器(实现可丢弃的
的映射器),行为正常,就像根本没有映射器一样,不确定是什么导致它,但是可能已经有一个内置的映射器,它使用继承树中较低的泛型类来实现
ExceptionMapper
?@SBylemans继承树中是否有比异常的
Throwable
更低的类?@SBylemans我不知道它是否有用,但我正在使用它
spring boot starter jersey