Подтвердить что ты не робот

Сменить поле с помощью ObjectMapper

Мне кажется, мне нужно создать специалиста ObjectMapper и не найти какой-либо пример кода для запуска процесса.

Создатель JSON использует свойства .Net и public и поэтому использует имена полей с начальным прописным. Я разбираю JSON в POJO, поэтому я хотел бы использовать строчный начальный файл.

В конце:

    public class Facet
    {
        public string Name { get; set; }
        public string  Value { get; set; }
    }

В конце концов я должен иметь:

    public class Facet {
        public String Name;
        public String Value;
    }

Я бы предпочел:

    public class Facet {
        public String Name;
        public String Value;
    }

Я прав, что это можно сделать с помощью ObjectMapper?

4b9b3361

Ответ 1

Ваша первая проблема может быть решена очень просто с помощью аннотации @JsonProperty:

// java-side class
public class Facet
{
    @JsonProperty("Name")
    public String name;

    @JsonProperty("Value")
    public String value;
}

Теперь ObjectMapper будет соответствовать именам полей с по-разному. Если вы не хотите добавлять аннотации в свои классы, вы можете создать класс Mix-in для своего Facet:

public class FacetMixIn
{
    @JsonProperty("Name")
    public String name;

    @JsonProperty("Value")
    public String value;
}

objectMapper.getDeserializationConfig().addMixInAnnotations(Facet.class, FacetMixIn.class);

Это приведет к тому же, не требуя дополнительных аннотаций в вашем классе Facet.

Ответ 2

Вместо аннотирования каждого поля Jackson ObjectMapper можно настроить на использование встроенного или пользовательского PropertyNamingStrategy, чтобы применить согласованный перевод между Java имена свойств/полей и имена элементов JSON.

Например:

myObjectMapper.setPropertyNamingStrategy(PascalCaseStrategy);

Ответ 3

Эта проблема может быть решена с помощью Jackson 2.5.0 следующим образом:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

Из javadoc:

com.fasterxml.jackson.databind.MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES

Функция, которая позволит более простить десериализацию входящих JSON. Если включено, свойства bean будут сопоставлены с использованием эквивалентные в нижнем регистре, что означает, что любая случайная комбинация (входящая и совпадающие имена канонизируются нижним корпусом) должны работать.

Обратите внимание, что дополнительные входящие имена свойств должны быть обнулены перед сравнением, для случаев где есть прописные буквы. Накладные расходы для имен, которые однако нижний регистр должен быть пренебрежимо мал.

По умолчанию функция отключена.

С: 2.5

Ответ 4

Просто быстрое обновление, поскольку я искал тот же самый ответ и фрагмент кода objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);