JAX-RS 服务抛出 404 HTTPException 但客户端收到 HTTP 500 代码

2024-04-15

我有一个 RESTful 资源,它调用 EJB 来进行查询。如果查询没有结果,EJB 将抛出 EntityNotFoundException。在 catch 块中,将抛出 javax.xml.ws.http.HTTPException ,代码为 404。

@Stateless
@Path("naturezas")
public class NaturezasResource {

    @GET
    @Path("list/{code}")
    @Produces(MediaType.APPLICATION_JSON)
    public String listByLista(
            @PathParam("code") codeListaNaturezasEnum code) {
        try {
            List<NaturezaORM> naturezas = this.naturezaSB
                    .listByListaNaturezas(code);
            ObjectMapper mapper = new ObjectMapper();
            return mapper.writeValueAsString(naturezas);
        } catch (EntityNotFoundException e) { // No data found
            logger.error("there is no Natures with the code " + code);
            throw new HTTPException(404);
        } catch (Exception e) { // Other exceptions
            e.printStackTrace();
            throw new HTTPException(500);
        }
    }

}

当我使用没有结果的代码调用 Rest 服务时,EntityNotFoundExceptioncatch 块被打印。但是,我的客户端收到 HTTP 代码 500,而不是 404。为什么我没有收到 404 代码?

Thanks,

拉斐尔·阿方索


javax.xml.ws.http.HTTPException https://docs.oracle.com/javase/7/docs/api/javax/xml/ws/http/HTTPException.html适用于 JAX-WS。默认情况下,JAX-RS 不知道如何处理它,除非你写一个ExceptionMapper为了它。因此,异常会向上冒泡到容器级别,容器仅发送通用的内部服务器错误响应。

而是使用WebApplicationException http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html或其子类之一。这里列出了层次结构中包含的异常以及它们映射到的内容(注意:这仅在 JAX-RS 2 中)

Exception                      Status code    Description
-------------------------------------------------------------------------------
BadRequestException            400            Malformed message
NotAuthorizedException         401            Authentication failure
ForbiddenException             403            Not permitted to access
NotFoundException              404            Couldn’t find resource
NotAllowedException            405            HTTP method not supported
NotAcceptableException         406            Client media type requested 
                                                            not supported
NotSupportedException          415            Client posted media type 
                                                            not supported
InternalServerErrorException   500            General server error
ServiceUnavailableException    503            Server is temporarily unavailable 
                                                            or busy

您也可以在WebApplicationException上面的链接。它们将属于直接子类之一ClientErrorException, RedirectionException, or ServerErrorException.

对于 JAX-RS 1.x,此层次结构不存在,因此您需要执行 @RafaelAlfonso 在评论中显示的操作

throw new WebApplicationException(Response.Status.NOT_FOUND);

还有很多其他可能的构造函数。只需查看上面的 API 链接即可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAX-RS 服务抛出 404 HTTPException 但客户端收到 HTTP 500 代码 的相关文章

  • SPNEGO 密码身份验证问题

    我已将我的应用程序配置为通过 SPNEGO 与 Websphere 使用 Kerberos 身份验证 这是详细信息 krb5 conf libdefaults default realm ABC MYCOMPANY COM default
  • 如何在 IDEA Intellij 上使用 Spring-boot 自动重新加载

    我写了一个基于Spring boot tomcat freemarker的项目 我运行成功 但是每当我修改一些模板和java类时 我必须重新启动服务器或使用Intellij上的 重新加载更改的类 菜单才能使更改生效 浪费很多时间 然后我尝试
  • 从文本文件中读取阿拉伯字符

    我完成了一个项目 在该项目中我读取了用记事本编写的文本文件 我的文本文件中的字符是阿拉伯语 文件编码类型是UTF 8 当在 Netbeans 7 0 1 中启动我的项目时 一切似乎都正常 但是当我将项目构建为 jar 文件时 字符以这种方式
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 运行 java -jar 时出现 java.lang.ClassNotFoundException

    我正在使用 ant 来构建我的build xml文件 它编译正常 但随后得到运行时java lang NoClassDefFoundError通过 运行生成的 jar 时java jar my jar jar 似乎这个问题出现了很多 但没有
  • 即使在轴上进行自动量程调整,我也可以保留积分刻度线吗?

    我 偷 了一些代码here http fxexperience com 2012 01 curve fitting and styling areachart 拥有一个AreaChart我在 FXML 中使用了 平滑线条 它的工作原理如下
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 如何在 HandlerInterceptorAdapter 中添加 HttpServletRequest 标头?

    我正在尝试将授权标头添加到我的请求中 作为我们切换环境时的临时解决方法 我试图在扩展 HandlerInterceptorAdapter 的拦截器中处理它 我使用 MutableHttpServletRequest 类制作here http
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • Java:SortedMap、TreeMap、可比较?如何使用?

    我有一个对象列表 需要根据其中一个字段的属性进行排序 我听说 SortedMap 和 Comparator 是实现此目的的最佳方法 我是否要与正在排序的类实现 Comparable 还是创建一个新类 如何实例化 SortedMap 并传入
  • 纱线上的火花,连接到资源管理器 /0.0.0.0:8032

    我正在我的开发机器 Mac 上编写 Spark 程序 hadoop的版本是2 6 spark的版本是1 6 2 hadoop集群有3个节点 当然都在linux机器上 我在idea IDE中以spark独立模式运行spark程序 它运行成功
  • 用于层次结构树角色的 Spring Security / Java EE 解决方案

    我知道 Spring Security 非常适合标准角色和基于权限的授权 我不确定的是这种情况 系统中管理着 10 000 名员工 员工被组织成组织结构图 跨部门的谁向谁报告的树 其中一些员工是用户 这些用户仅被允许访问其职责范围内的员工
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • 使用 PC/SC 读卡器验证 Ultralight EV1

    我在尝试使用 Java 中的 PC SC 读卡器 特别是 ACR1222L 验证 Ultralight EV1 卡时遇到问题 我能够使用 ISO 14443 3 标签的相应 APDU 在不受保护的标签上进行写入和读取 但是 我找不到运行 P
  • 如何从 JavaFX 中的另一个控制器类访问 UI 元素?

    我有一个使用 NetBeans 8 编写的 JavaFX Java 8 应用程序 没有SceneBuilder 我的应用程序有一个主窗口 该窗口有自己的 FXML 文件 primary fxml 和自己的控制器类 FXMLPrimaryCo

随机推荐

  • Eclipse中的部署目录在哪里?

    我正在 Eclipse 中开发一个 Web 应用程序 部署目录树位于哪里 在我的 Java 工作区树中的 Apache 目录结构或某些子目录树结构中 我问这个问题是因为当我的教程应用程序的更新不起作用时 我去浏览目录树 并且假设src子树代
  • WPF:将 DataGrid 绑定到列表

    有趣的是 有时简单的事情会在背后咬我一口 我可以使用 DataGridTextColumn 将 DataGrid 很好地绑定到某个任意类的集合 如下所示 bound to List
  • 使用 web-fragment 时 tagdir 属性无效

    我正在使用 web fragment 功能在 jar 中维护 JSP 和标签 并且使用这种方法 我的 JSP 页面无法找到 tagdir 并导致 此标签库的 tagdir 属性值无效 这是我的罐子里的结构 META INF 资源 WEB I
  • 在 Java 中将颜色名称转换为 RGB 值

    当颜色名称作为输入给出时 我想要一个 RGB 值 以下代码适用于某些颜色 我猜适用于红色等原色 但适用于其他一些颜色 例如青色和淡紫色 import java awt Color import javax swing text html S
  • 如何找到最新的 gradle 版本和包装器

    嗨 我对 Android 开发相当陌生 我对 Gradle 版本和 gradle wrapper properties 中的分发 url 有疑问 classpath com android tools build gradle gradle
  • 如何使用 iOS Swift 更新 firebase 中的单个数组元素?

    这里我使用 firestore 查询来更新 插入数据 如何将数组值的字典更新到 firebase 数据库 here is my firestore data structure 现在可以获取数据slot1 gt 第 0 个位置值在模型类中
  • 谷歌图表显示的是金钱而不是百分比

    给定饼图的数据 data new google visualization arrayToDataTable Sales Revenue Distribution Author 5 Company 2 Tax 0 4 Payment Pro
  • 如何解压缩C中的字符数组

    我需要创建函数 char decompress const char src 该函数的输入是一些字符串 Hello world gt Hello world Hel2o world 10 gt Hello world 正如您所看到的 如果有
  • 使用 IntelliJ 运行 JUnit 测试

    我正在使用 IntelliJ 2018 1 并且我正在尝试运行TeaVM http teavm org JUnit 测试 但运行测试时CTRL SHIFT F10测试被跳过 RunWith TeaVMTestRunner class Ski
  • 从 matplotlib 刻度标签格式中删除前导 0

    如何在 matplotlib 中将数字十进制数据 例如 0 和 1 之间 的刻度标签更改为 0 1 2 而不是 0 0 0 1 0 2 例如 hist rand 100 xticks 0 2 4 6 8 将标签格式设置为 0 0 0 2 等
  • 使用 Keith Wood 的 jQuery SVG 插件对外部加载的 SVG 进行动画处理

    我正在尝试使用 Keith Wood 为从外部 SVG 加载的一组路径的填充颜色设置动画plugin http keith wood name svg html 首先 我将 SVG 导入到 div 容器中 document ready fu
  • 本地通知在设备上不起作用,但在模拟器上起作用

    我读过一些如何使用的指南UILocalNotification的 所以我一直在尝试 但自从第一次尝试以来还没有成功 要在 AppDelegate m 中注册通知 我使用 BOOL application UIApplication appl
  • 设备支持 ,但 APK 仅支持 x86

    我正在尝试通过 Android 模拟器为不同的 CPU ABis 部署和调试应用程序 但出现此错误 它没有指定模拟器支持哪些 ABI 我尝试运行支持所有 ABI 的 APK 但仍然遇到相同的错误 这种情况仅发生在具有 Google Play
  • 在大表上添加索引需要很长时间

    我有一个表 在 MySQL 中 名为unused大约有 540 万行 该表如下所示 CREATE TABLE unused id bigint 20 NOT NULL AUTO INCREMENT account id bigint 20
  • 在 apache 配置中创建变量

    我有一个 apache 配置 如下所示 RewriteCond QUERY STRING site eu jp in NC RewriteRule fetchHomePage action https example com 1 R 301
  • 当核心数据中没有找到相关实体时,无法识别的选择器发送到实例

    我有一个核心数据问题 我有两个实体 第二个实体与第一个实体是一对多关系 当尝试在第一个视图控制器上加载第一个视图控制器的详细信息和第二个详细信息的 UITableView 时 我希望此 tableView 代码允许我在找到记录时显示一个空白
  • 在实体框架代码优先中为同一个表定义多个外键

    我的 MVC 应用程序中有两个实体 我使用 Entity Framework 6 Code First 方法填充数据库 Student实体中有两个city id 其中一个用于出生城市 另一个用于工作城市 当我按上面定义外键时 迁移后会在 S
  • 来自task_struct的完整进程名称

    我想从中获取完整的进程名称struct task struct The comm字段仅存储 16 个字符 而进程名称可以更长 有没有办法获得完整的进程名称 这可以通过获取来完成struct vm area struct from task
  • QGLWidget 比 QWidget 慢

    问题主要是在标题中确定的 我尝试了 Qt 的示例 二维绘画 http harmattan dev nokia com docs library html qt4 opengl 2dpainting html 并注意到 如果我尝试在 QGLW
  • JAX-RS 服务抛出 404 HTTPException 但客户端收到 HTTP 500 代码

    我有一个 RESTful 资源 它调用 EJB 来进行查询 如果查询没有结果 EJB 将抛出 EntityNotFoundException 在 catch 块中 将抛出 javax xml ws http HTTPException 代码