gpt4 book ai didi

jaxb - Jersey/JAXB XML 验证错误的自定义错误消息

转载 作者:行者123 更新时间:2023-12-05 01:09:11 29 4
gpt4 key购买 nike

所以我有一个 Jersey 的 REST 服务设置。

我的 POJO 被简单地注释为@XmlRootElement

我向我的 REST 服务发送了一个 POST 请求,一切正常。

1- 我向服务发送了格式错误的 XML,我取回了容器默认的 400 Bad Request 页面。使用 Glassfish 3 我记不清了,但我知道我可以更改或告诉我的网络应用程序映射到我自己的 400 错误请求,对吗?我在哪里可以找到有关该特定主题的文档。

2- 我发送了有效的 XML,但在预期的字段之一中我输入了空值。我的服务试图做一些事情,但它抛出了一个持久性异常。我取回了容器默认的 500 Internal Server Error 页面,它列出了抛出的异常。我想我也可以映射到我自己的自定义错误页面,但我不只是想显示异常消息。这被认为是一个安全问题。

我基本上想根据我的业务逻辑自己验证字段,然后向客户端返回一条错误消息,例如“Field1 无效”仅此而已。并且客户端应该能够解析错误代码并且还知道哪个字段是错误的。

另外,当我的服务出现不止一种类型的错误请求错误时,我该怎么办?例如,该字段可以期望 1-3 之间的 INT 值,但特定业务请求期望值 2 并发送 3。

因此对于类型/值验证,我只想说“此处的字段名称无效”。但是对于特定的业务逻辑,例如“无效帐户”或“帐户已过期”或“地址不匹配”等...

或者当我有超过 1 个成功代码时怎么样?

基本上,我采用旧的“xml”类型服务并将其转换为 REST 样式以进行概念验证并使其符合标准。旧的几乎是 100% POST,即使在“查询结果时也是如此。即:GET。所以基本上你向它 POST XML,它读取 XML,调用业务逻辑,逻辑在 XML 响应中返回适当的代码。所以一切都是HTTP 200 OK 并且业务逻辑代码在 XML 响应中返回。因此客户端唯一一次收到 500 错误是在服务无法生成 XML 响应的硬故障时。即使是无效的 XML 也会返回 200 OK ,但返回的 XML 响应用我自己的错误代码表明了这一点。

前阵子有人建议我将 SOAP 用于更多面向“消息”的服务,但我仍然认为它太重了,我可以使用 REST 实现我的服务功能,即使我不需要大部分 REST?

最佳答案

您可以使用 ExceptionMappers 将异常映射到 HTTP 响应 - 请参阅: http://jersey.java.net/nonav/documentation/1.11/jax-rs.html#d4e433 http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/ExceptionMapper.html

如果你想在请求到达资源方法之前进行验证,你可以尝试为此编写一个 ContainerRequestFilter 并抛出一个 WebApplicationException它将 Response 作为参数 - jersey 自动将该异常映射到它初始化时使用的响应。

关于jaxb - Jersey/JAXB XML 验证错误的自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609397/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com