【问题标题】:JAX-RS 2.0 doesn't throw exception when there is invalid attribute type in JSON request当 JSON 请求中的属性类型无效时,JAX-RS 2.0 不会抛出异常
【发布时间】:2017-08-24 12:42:17
【问题描述】:

我有以下 REST 端点:

@Stateless
@Path("test")
public class TestResource {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public TestDTO test(TestDTO dto) {
        return dto;
    }
}

TestDTO bean 非常简单:

public class TestDTO {
    private String id;
    private Integer number;
// + getter/setter
}

如果我发布以下 JSON,则响应将完全相同(正如在这个简单示例中所预期的那样):

{
"id": "abc",
"number": 123
}

但如果我为“数字”发送一个字符串值:

{
"id": "abc",
"number": "NotANumber"
}

服务器不会初始化我的 TestDTO 的数字变量(值 = null),我的响应将如下:

{
    "id": "abc"
}

我不明白...为什么服务器没有响应“400 - 错误请求”? :/

此代码在 Weblogic 应用程序服务器版本 12.2.1.1.0 中运行,并提供 Jersey 实现(我的 pom.xml 中只有一个依赖项:javaee-api 版本 7.0)

【问题讨论】:

  • 它可能正在初始化为null,并且由于number 已初始化为null,因此在转换为JSON 时必须忽略它。您是否尝试过检查此选项?
  • 是的,如果我在返回上设置断点,“number”会被初始化为 null。但这不是我认为的预期行为......我应该收到 400 Bad request
  • 所以基本上,它正在尝试将 json 值“NotANumber”转换为 Java Integer,当然它不能,但不是抛出异常,而是继续......所以我不能知道我的客户是否没有给我发号码,或者他给我发错了什么......
  • 仅供参考,在 tomcat 服务器中,我在类似情况下收到了错误的响应。所以,这似乎是 weblogic 特有的行为。
  • 是的,这正是我的想法@VikasSachdeva :-(

标签: jax-rs jersey-2.0 weblogic12c java-ee-7


【解决方案1】:

好吧...不抛出任何异常是 MOXy 的默认选择,它是所有 Oracle 产品(Glassfish 和 WebLogic)(而不是 Jackson)的新默认 JAX-RS Json Provider。 这对我来说似乎很奇怪......但是是的,我们必须处理它:/

为此,我们必须注册一个 ValidationErrorHandler。

我在那里找到了一个完整(且有效)的解决方案: Custom MOXyJsonProvider in Jersey 2 not working?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2021-11-25
    • 1970-01-01
    • 2018-09-24
    • 2013-11-20
    • 2016-08-09
    • 2016-11-07
    相关资源
    最近更新 更多