Использование другого сопоставителя объектов для части JSON - PullRequest
0 голосов
/ 28 апреля 2019

Для нашего сервисного ввода мы используем объектный преобразователь с определенными конфигами для его сериализации. Мы предоставляем те же самые конфигеры объектного сопоставления нашему клиенту в нашей client-lib и используем его для десериализации ввода с нашей стороны.

Теперь мы добавляем еще один объект к нашему входу, который принадлежит общей команде и имеет собственную конфигурацию сопоставителя объектов для правильной сериализации.

class MyAPIRequest {
    MyOtherOwnedClass1 obj1;
    MyOtherOwnedClass2 obj2;

    //New Shared class which is being added as part of input now: 
    CommonlyOwnedClass newObj;

}


class MyAPIRequestObjectMapperFactory() {
   static ObjectMapper newInstance(IonSystem ionSystem) {
        final ObjectMapper  objectMapper = new ObjectMapper();                 
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
        objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);

        return objectMapper;
    }
}

class CommonlyOwnedClassObjectMapperFactory() {
   static ObjectMapper newInstance(IonSystem ionSystem) {
        final ObjectMapper  objectMapper = new ObjectMapper();                 
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.NONE);
        objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.ANY);

        return objectMapper;
    }
}

Как я могу обновить мой ObjectMapper для использования другого ObjectMapper (предоставляется CommonlyOwnedClassObjectMapperFactory) для newObj и продолжать использовать существующий объектный преобразователь (в MyAPIRequestObjectMapperFactory) для остальных объектов в MyAPIRequest?

Редактировать: Я использую Jackson-2.8, но могу обновить до 2.9, если требуется

1 Ответ

0 голосов
/ 30 апреля 2019

Метод setVisibility управляется защищенной переменной конфигурации (_serializationConfig & _deserializationConfig в 2.8 и _configOverrides в 2.9).Метод setVisibility перегружен, что требует проверки видимости для переопределения внутренней переменной конфигурации.Перегруженную версию можно использовать для настройки конфигурации вашего картографа, получая проверку видимости от внешнего картографа.

ObjectMapper yourObjectMapper = MyAPIRequestObjectMapperFactory.newInstance();
    ObjectMapper externalObjectMapper = CommonlyOwnedClassObjectMapperFactory.newInstance();
    yourObjectMapper.setVisibility(externalObjectMapper.getVisibilityChecker());
    //then set your visibility
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...