JAX-RS jersey ExceptionMappers用户定义的异常

Who*_*AmI 38 java rest web-services jax-rs jersey

我是新手,试图阅读一些文档,但它不起作用,请耐心等待.

我创建了一个UserNotFoundMapper使用ExceptionMappers这样的:

public class UserNotFoundMapper implements ExceptionMapper<UserNotFoundException> {

@Override
public Response toResponse(UserNotFoundException ex) {
    return Response.status(404).entity(ex.getMessage()).type("text/plain").build();
}

}
Run Code Online (Sandbox Code Playgroud)

这在我的服务中:

@GET
@Path("/user")
public Response getUser(@QueryParam("id") String id) throws UserNotFoundException{
    //Some user validation code with DB hit, if not found then
    throw new UserNotFoundException();
}
Run Code Online (Sandbox Code Playgroud)

UserNotFoundException是一个User-Defined例外.

我试过这个:

public class UserNotFoundException extends Exception {
       //SOME block of code 
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用该服务时,UserDefinedExceptionMapper不会被调用.看来我可能会遗漏一些东西UserDefinedException.那么如何定义这个异常呢?

请让我知道如何定义UserNotFoundException.

Per*_*ion 56

您需要注释您的异常映射器@Provider,否则它将永远不会在JAX-RS运行时注册.

@Provider
public class UserNotFoundMapper implements
        ExceptionMapper<UserNotFoundException> {
    @Override
    public Response toResponse(UserNotFoundException ex) {
        return Response.status(404).entity(ex.getMessage()).type("text/plain")
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @WhoAmI - JAX-RS提供程序自动映射Web应用程序异常.因此,与使用异常映射器相反,例如,您可以扩展`WebApplicationException`并覆盖它的`getResponse`方法.有些人更愿意为他们为JAX-RS实现定义的所有异常执行此操作.Mapper非常棒,用于映射不从WebApplicationException扩展的异常(例如所有标准Java异常,第三方库异常等). (3认同)
  • @WhoAmI:使用哪种异常方法取决于您."ExceptionMapper"的优势在于您的代码可以保持独立于Jersey,您还可以映射超出您控制范围的异常(框架异常).`WebApplicationException`的优点在于它使用起来更简单. (2认同)