一个简单的

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());
    }
}

这也应该阻止异常出现在您的日志文件中

10-08 18:26