【发布时间】: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