Заполнить ненулевое поле в объекте JSON

Наш REST API получает входные данные некоторых объектов JSON, где некоторые поля должны быть не нулевыми. Это может быть либо String / Integer, либо даже другой экземпляр класса в качестве ссылки.

Мы пытаемся найти способ заставить эти поля быть не нулевыми вместо альтернативного способа проверки на нуль в API. Текущий:

    if (myObject.getSomeOtherObject() == null)
    throw new SomeException();

То, что мы хотим иметь, это что-то вроде:

    class MyObject{
    @Required
    OtherObject someOtherObject;
    ...
    }

Мы попробовали 3 вещи:

Обновите систему до версии Jackson 2.0.6 и используйте аннотацию com.fasterxml.jackson.annotation.JsonProperty. Но это выглядит неработающим. Нашли эти ссылки:http://jira.codehaus.org/browse/JACKSON-767

Расширение JsonDeserializer для проверки нуля, но проблема в том, что он даже не выполняется на нулевом вводе.

    public class NotNullDeserializer extends JsonDeserializer {

        @Override
        public T deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {

            ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
            Class type = (Class) superClass.getActualTypeArguments()[0];

            T t = jsonparser.readValueAs(type);

            if (t == null){
                String classNameField = type.getName();
                String field = jsonparser.getCurrentName();
                throw new WrongInputException("The field '"+field+"' of type '"+classNameField+"' should not be null.");
            }

            return t;
        }

    }

    public class NotNullAddressDeserializer extends NotNullDeserializer {

    }

    @JsonDeserialize(using=NotNullAddressDeserializer.class)
        Address to;

Написание собственной аннотации @Required и попытка проверки с помощью ResourceFilter, но, похоже, я не могу получить реальный объект из ContainerRequest, и даже если бы мы могли, не уверен, как выполнить глубокую проверку нулевой ссылки в object.otherObject.someObject.fieldNotNullable
    private class Filter implements ResourceFilter, ContainerRequestFilter {

        private final ArrayList requiredParameters;

        protected Filter() {
            requiredParameters = null;
        }

        protected Filter(ArrayList requiredParameters) {
            this.requiredParameters = requiredParameters;
        }

        @Override
        public ContainerRequestFilter getRequestFilter() {
            return this;
        }

        @Override
        public ContainerResponseFilter getResponseFilter() {
            return null;
        }


        @Override
        public ContainerRequest filter(ContainerRequest request) {
            if (requiredParameters != null && requiredParameters.size() > 0) {
                MultivaluedMap params = request.getQueryParameters();
                params.putAll(request.getFormParameters());
                StringBuffer missingParams = new StringBuffer();
                for (String reqParam : requiredParameters) {
                    List paramValues = params.get(reqParam);
                    if (paramValues == null || paramValues != null && paramValues.size() == 0)
                        missingParams.append(reqParam + ",");
                }
                if (missingParams.length() > 0)
                    throw new WrongInputException("Required parameters are missing: " + missingParams);
            }
            return request;
        }
    }



Любая помощь и понимание приветствуется.

Ответы на вопрос(4)

Ваш ответ на вопрос