【发布时间】:2012-03-23 18:31:12
【问题描述】:
我正在使用 Jersey 的集成 Jackson 处理将传入的 JSON 转换为 POJO,例如:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response newCustomer( CustomerRepresentation customer)
{
...
}
如果客户端发送带有无效字段的 JSON,Jersey 当前返回 500 Internal Server Error。相反,我想返回一个400 Bad Request,最好带有一些有意义的详细信息来指示哪些字段有误。
对如何实现这一点有任何见解吗? (至少返回一个通用的 400 而不是完全不合适的 500?)
更新: 这是在调用我的处理程序之前在服务器端生成的异常:
javax.servlet.ServletException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException:
Unrecognized field "this_isnt_a_known"_field" (Class com.redacted....), not marked as ignorable
【问题讨论】:
-
400实际上是Bad request,即服务器认为客户端发送了错误的请求。所以在语义上它不符合你想要实现的目标。 -
感谢您接住我的失误。我打算输入“错误请求”。相应地编辑了问题。
-
如果请求正文无效,Jersey 通常会返回 400。你确定它不会在你的方法体中使用 NPE 或其他东西失败吗?您是否在应用服务器日志中看到任何错误和/或堆栈跟踪?
-
谢谢!很高兴知道 Jersey supposed 返回 400。我正在更新问题以包含服务器端异常。它肯定是在到达我的处理程序之前生成的,并且与 JSON 中无法识别的字段相关。
-
@HolySamosa:您可以做的是在调试模式下运行您的 Web 容器,在引发
UnrecognizedPropertyException时放置断点,然后查看处理它时会发生什么。也许你会在泽西岛发现一个错误。