我正在编写一个简单的 REST 服务,它需要一个包含 Json 的 POST。该服务应该拒绝任何不包含它所期望的密钥的 Json。我在 JBoss EAP 7.1 上使用 JAX-RS,但无法做到这一点。代码示例:
import javax.ejb.Stateless;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/")
@Stateless
@Produces("text/plain")
public class TestAccess
{
@POST
@Path("test/")
@Consumes(MediaType.APPLICATION_JSON)
public String consumeJson(TestClass c)
{
return c.toString();
}
}
public class TestClass
{
public String first;
public String second;
public String toString()
{
return (first + ", " + second);
}
}
以前我写consumeJson
期望期望 aJsonObject
并使用 Jackson 解析它ObjectMapper
。这样做会导致在接收 Json 缺失键时出错。我认为我现在这样做的方式是一种“更清洁”的方式,因为现在参数列表清楚地显示了 Json 应该描述的对象类型。但是,我不想首先检查方法中的每个字段,也不想向isValid()
以这种方式获得的每个对象添加方法。
该示例{"first" : "contentOfFirst"}
返回"contentOfFirst, null"
而不是失败。
编辑:为了澄清,我尝试了这样的事情:
import javax.validation.constraints.NotNull;
public class TestClass
{
@NotNull
public String first;
@NotNull
public String second;
public String toString()
{
return (first + ", " + second);
}
}
这并没有改变结果,而不是失败(如预期的那样) POST 仍然得到了 response "contentOfFirst, null"
。我知道这些注释仍然需要一个验证器来验证它们。我(错误地?)认为 Jboss 提供了这样一个验证器。