您问题中的评论为您指明了正确的方向。由于答案未提及,因此我将在此答案中概述一般思想。
延伸WebApplicationException
JAX-
RS允许定义Java异常到HTTP错误响应的直接映射。通过扩展
WebApplicationException,您可以创建特定于应用程序的异常,这些异常将使用状态码和可选消息作为响应的主体来构建HTTP响应。
以下异常生成
404状态代码为HTTP的响应:
public class CustomerNotFoundException extends WebApplicationException { public CustomerNotFoundException() { super(Responses.notFound().build()); } public CustomerNotFoundException(String message) { super(Response.status(Responses.NOT_FOUND). entity(message).type("text/plain").build()); }}
WebApplicationException是a
RuntimeException,不需要将其包装在
try-
catch块中或在
throws子句中声明:
创建@Path("customers/{customerId}")public Customer findCustomer(@PathParam("customerId") Long customerId) { Customer customer = customerService.find(customerId); if (customer == null) { throw new CustomerNotFoundException("Customer not found with ID " + customerId); } return customer;}
ExceptionMappers
在其他情况下,抛出
WebApplicationException或扩展类的实例可能不合适
WebApplicationException,而是将现有异常映射到响应可能更可取。
在这种情况下,可以使用自定义异常映射提供程序。提供者必须实现该
ExceptionMapper<E extendsThrowable>接口。例如,以下将JAP映射
EntityNotFoundException到HTTP
404响应:
@Providerpublic class EntityNotFoundExceptionMapper implements ExceptionMapper<EntityNotFoundException> { @Override public Response toResponse(EntityNotFoundException ex) { return Response.status(404).entity(ex.getMessage()).type("text/plain").build(); }}
EntityNotFoundException引发an时,实例的
toResponse(E)方法
EntityNotFoundExceptionMapper将被调用。
该
@Provider注解声明了类是感兴趣的JAX-
RS运行。可以将该类添加到
Application配置的实例的类集中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)