Я получаю строку JSON из Интернета; как и большинство JSON, которые я видел, он содержит длинные ключи, разделенные подчеркиванием. По сути, моя цель - десериализовать JSON в java-объекты, но я не использую подчеркивания в java-коде.
Например, у меня может быть User
класс с firstName
полем в случае верблюда, одновременно мне нужно как-то сказать Джексону сопоставить first_name
ключ из JSON в firstName
поле класса. Является ли это возможным?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Вы можете настроить
ObjectMapper
преобразование регистра верблюда в имена с подчеркиванием:Или аннотируйте определенный класс модели этой аннотацией:
До Джексона 2.7 константа называлась:
источник
@JsonProperty
(имя, выведенное из нормальныхcamelCase
свойств Java),PropertyNamingStrategy.SNAKE_CASE
десериализация перестала работать с camelCase JSON (как я использовал) и потребовала snake_case.Если это весеннее загрузочное приложение, в файле application.properties просто используйте
Или Аннотируйте класс модели с этой аннотацией.
источник
spring.jackson.property-naming-strategy=SNAKE_CASE
не работает, я использую Spring Boot 2.0ObjectMapper
не создан Spring? Создайте класс @Configuration с помощью метода @Bean, который возвращает ObjectMapper. Не уверен, если это необходимо.Если вы хотите это для одного класса, вы можете использовать PropertyNamingStrategy с @JsonNaming , что-то вроде этого:
Будет сериализовать в:
Поскольку в осуждается в пользу , так что вы должны использовать:
Jackson 2.7
LowerCaseWithUnderscoresStrategy
SnakeCaseStrategy
источник
Приведенные выше ответы касаются
@JsonProperty
иCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
являются точными на 100%, хотя некоторые люди (например, я) могут попытаться сделать это в приложении Spring MVC с конфигурацией на основе кода. Вот пример кода (который у меня внутриBeans.java
) для достижения желаемого эффекта:источник
application.properties
addspring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Для Spring Boot 1.4 используйтеspring.jackson.property-naming-strategy=SNAKE_CASE
вместо этого.final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
В настоящее время рекомендуется настроить Джексона в файле
application.yml
(илиproperties
).Пример:
Если у вас есть более сложные требования к конфигурации, вы также можете настроить Джексона программно.
источник
Ниже приведено несколько ответов, указывающих обе стратегии для двух разных версий библиотеки Джексона:
Для Джексона 2.6. *
Для Джексона 2.7. *
источник