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

Jersey/JAXB XML验证错误的自定义错误消息,jaxb,jersey,glassfish-3,Jaxb,Jersey,Glassfish 3,因此,我有一个休息服务设置与泽西 我的POJO只是注释为@XmlRootElement 我向我的REST服务发送了一个POST请求,一切正常 1-我将格式不正确的XML发送到服务,并返回默认的400错误请求页面。使用Glassfish 3我记不清了,但我知道我可以更改或告诉我的web应用程序映射到我自己的400个错误请求,对吗?我在哪里可以找到关于该特定主题的文档 2-我发送了有效的XML,但在其中一个预期字段中输入了空值。我的服务试图做一些事情,但它抛出了一个持久性异常。我返回容器默认500内

因此,我有一个休息服务设置与泽西

我的POJO只是注释为@XmlRootElement

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

1-我将格式不正确的XML发送到服务,并返回默认的400错误请求页面。使用Glassfish 3我记不清了,但我知道我可以更改或告诉我的web应用程序映射到我自己的400个错误请求,对吗?我在哪里可以找到关于该特定主题的文档

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

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

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

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

或者当我有超过1个成功代码时又如何

基本上,我正在使用一个旧的“xml”类型的服务,并将其转换为REST样式以进行概念验证,并使其达到标准。旧的几乎是100%后,即使在“查询结果。即:获取。因此,基本上,您向it发布XML,它读取XML,调用业务逻辑,并且逻辑在XML响应中返回适当的代码。因此,一切正常,业务逻辑代码以XML响应的形式返回。因此,客户机收到500错误的唯一时间是出现硬故障时,服务无法生成XML响应。即使是无效的XML也返回为200 OK,但XML响应返回时用我自己的错误代码表示这一点


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

您可以使用ExceptionMappers将异常映射到HTTP响应-请参阅:


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

谢谢,我会尝试。但我还有几个问题。我更新了主要问题。