Как включить оболочку Pascal по умолчанию при использовании Jackson JSON в Spring MVC? - PullRequest
5 голосов
/ 12 января 2011

У меня есть проект, который использует Spring MVC для создания и обработки нескольких конечных точек REST.В настоящее время я работаю над использованием Джексона для автоматической обработки разделения / десериализации JSON с использованием аннотаций @RequestBody и @ResponseBody.

Я получил работу Джексона, поэтому у меня есть отправная точка.Моя проблема в том, что наша старая сериализация была сделана вручную и использовала корпус Pascal вместо корпуса Camel («MyVariable» вместо «myVariable»), а Джексон по умолчанию использует корпус Camel.

Я знаю, что могу изменить вручнуюимя переменной, используя @JsonProperty.При этом я не считаю, что добавление @JsonProperty ко всем моим переменным является жизнеспособным долгосрочным решением.

Есть ли способ заставить Джексона использовать оболочку Pascal при сериализации и десериализации, кроме использования@JsonProperty аннотация?

РЕДАКТИРОВАТЬ: Похоже, не существует чистого способа сделать это внешне.Несколько человек предложили переопределить разные классы как способ достижения моей цели.Я открыт для предложений о том, что я могу переопределить, что изменит корпус.На данный момент я сделал пользовательский ObjectMapper, который устанавливает некоторые свойства, которые я хочу (а именно Inclusion.NON_NULL).Я еще не нашел места, где бы я мог изменить поведение обсадной колонны.Есть мысли?

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

См. http://www.cowtowncoder.com/blog/archives/2011/03/entry_448.html Если вы можете подождать 1,8, он будет там включен.

1 голос
/ 21 января 2011

Я решил проблему, переопределив (де) сериализаторы.Для тех, кто заинтересован, вот как вы можете сделать это самостоятельно:

Шаг 1. Расширьте BeanSerializerFactory.

Переопределить метод _constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember propertyMember).Внутри этого метода измените name так, как считаете нужным.Для реализации оболочки Pascal я использовал эту строку: String formattedName = name.substring(0, 1).toUpperCase() + name.substring(1);.После изменения name вызовите super._constructWriter.

Шаг 2. Расширьте BeanDeserializationFactory.

Переопределите метод constructSettableProperty(DeserializationConfig config, BasicBeanDescription beanDesc, String name, AnnotatedMethod setter).Сделайте то же самое с параметром name, который вы указали внутри своего пользовательского BeanSerializerFactory.

Шаг 3. Создайте ObjectMapper.

Установите фабрику сериализатора в качестве вашего пользовательского компонентаСериализатор заводской.Установите поставщика десериализатора (я использовал эту строку: objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory()))).

Вот и все.Созданный вами ObjectMapper будет использовать вашу новую схему именования при сериализации или десериализации JSON.

0 голосов
/ 14 января 2011

Для чего бы то ни было, существует проблема Jira для поддержки подключаемых стратегий; голосование за него может помочь убедить разработчиков добавить поддержку. Как я упоминал в комментарии, можно переопределить внутреннее поведение, но это не так просто сделать.

...