JAX-RS 2.0时存在JSON请求无效的属性类型不抛出异常
问题描述:
我有以下REST端点:JAX-RS 2.0时存在JSON请求无效的属性类型不抛出异常
@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所提供新泽西实施运行(我只有一个依赖于我的pom.xml:JavaEE的-API版本7.0)
答
好了,所以.. 。不抛出任何异常是默认选择MOXy--所有Oracle产品(Glassfish和WebLogic)(而不是Jackson)的新默认JAX-RS Json提供程序。 这对我来说似乎很陌生...但是我们必须处理它:/
我们必须为此目的注册一个ValidationErrorHandler。
我发现了一个完整的(和工作)解决方案在那里: Custom MOXyJsonProvider in Jersey 2 not working?
它可能会越来越初始化为'null',自'number'已初始化为'null',当转换为它必须被忽略'JSON'。你有没有试过检查这个选项? –
是的,如果我在回报中放置了一个断点,那么“数字”被初始化为空。但是,这不是我预期的行为,我认为...我应该收到400错误的请求,而不是 – koD
所以基本上,它试图将JSON值“NotANumber”转换为Java整数,当然它不能但抛出一个异常,它会继续......所以我不能知道我的客户端是否不给我发送号码,或者他是否给我发错了...... – koD