当JSON请求中存在无效的属性类型时,JAX-RS 2.0不会抛出异常

时间:2017-08-24 12:42:17

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

我有以下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的数字变量(value = null),我的响应如下:

{
    "id": "abc"
}

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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