Aplicar campo no nulo en objeto JSON

Nuestra API REST recibe una entrada de algunos objetos JSON donde se requiere que algunos campos no sean nulos. Esos pueden ser String / Integer o incluso pueden ser otra instancia de clase como referencia.

Estamos tratando de encontrar una manera de hacer que esos campos no sean nulos, en lugar de la forma correcta de verificación nula en la api. Corriente:

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

Lo que queremos tener es algo como:

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

Hemos intentado 3 cosas:

Actualice a jackson 2.0.6 y use la anotación com.fasterxml.jackson.annotation.JsonProperty. Pero esto parece que no funciona. Encontré esas referencias:http://jira.codehaus.org/browse/JACKSON-767

Extender JsonDeserializer para verificar nulo pero el problema es que ni siquiera se ejecuta en la entrada nula.

    public class NotNullDeserializer<T> extends JsonDeserializer<T> {

        @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<Address> {

    }

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

Escribimos nuestra propia anotación @Required e intentamos verificar con ResourceFilter, pero parece que no puedo obtener el objeto real de ContainerRequest e incluso si pudiéramos, no estamos seguros de cómo ejecutar una comprobación profunda de la referencia nula en 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;
        }
    }


Cualquier ayuda e ideas apreciadas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta