【发布时间】:2020-05-07 09:27:50
【问题描述】:
我正在编写一个简单的 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 期望得到JsonObject 并使用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 仍然得到响应 "contentOfFirst, null"。我知道这些注释仍然需要一个验证器来验证它们。我(错误地?)以为 Jboss 提供了这样的验证器。
【问题讨论】:
标签: java jboss jax-rs jboss7.x java-ee-8