2017-08-24 31 views
0

我有以下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)

+0

它可能会越来越初始化为'null',自'number'已初始化为'null',当转换为它必须被忽略'JSON'。你有没有试过检查这个选项? –

+0

是的,如果我在回报中放置了一个断点,那么“数字”被初始化为空。但是,这不是我预期的行为,我认为...我应该收到400错误的请求,而不是 – koD

+0

所以基本上,它试图将JSON值“NotANumber”转换为Java整数,当然它不能但抛出一个异常,它会继续......所以我不能知道我的客户端是否不给我发送号码,或者他是否给我发错了...... – koD

回答

0

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

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

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

相关问题