我有以下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版)
答案 0 :(得分:0)
好的......不抛出任何异常是MOXy的默认选择,MOXy是所有Oracle产品(Glassfish和WebLogic)(而不是Jackson)的新默认JAX-RS Json Provider。 这对我来说似乎很奇怪...但是我们必须处理它:/
我们必须为此目的注册一个ValidationErrorHandler。
我在那里找到了一个完整的(和工作的)解决方案: Custom MOXyJsonProvider in Jersey 2 not working?