一个简单的
throw new WebApplicationException(400);
或任何其他
throw new ...
由
javax.ejb.EJBException
抛出,其中 Caused by:
是您刚刚抛出的异常。监视日志时,这很痛苦,因为并非每个异常都会打印堆栈跟踪。但 EJBException 做到了这一点。 >:(请理解 - EJBException 根本不会影响应用程序,只是它会在每个抛出的异常中打印出不需要的堆栈跟踪。
EJBException javadoc 说:
必须有办法让 EJBException 保持安静......
(更新)示例:
@Stateless
@Path("roads")
public class RoadsREST {
@PersistenceContext(unitName = "rd")
@GET
@Produces("application/json")
public List<NationalRoads> retrieve() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Root subs = cq.from(NationalRoads.class);
List<NationalRoads> roads = em.createQuery(cq).getResultList();
if (roads.isEmpty()) {
throw new WebApplicationException(404);
}
return roads;
}
}
最佳答案
最简单的解决方案是创建 WebApplicationException
的子类并使用 @ApplicationException
对其进行注释,如下所示:
@ApplicationException
public class RESTException extends WebApplicationException {
private static final long serialVersionUID = 1L;
public RESTException(Status status, String msg) {
super(Response.status(status).entity(msg).type(MediaType.TEXT_PLAIN).build());
}
}
这也应该阻止异常出现在您的日志文件中