Я пишу простой сервис REST, который ожидает POST, содержащий Json. Служба должна отказаться от любого Json, не содержащего именно те ключи, которые оно ожидает. Я использую JAX-RS на JBoss EAP 7.1 и не смог этого сделать. Пример кода:
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 предоставляет такой валидатор.