Как (де) сериализовать поле из объекта на основе аннотации с использованием Джексона?

Мне нужно настроить Джексона определенным образом, который яопишу ниже.

ТребованияАннотированные поля сериализуются только с их идентификатором:Если поле является нормальным объектом, сериализуйте егоidЕсли поле является коллекцией объектов, сериализуйте массивidАннотированные поля по-разному сериализуют имена своих свойств:Если поле является нормальным объектом, добавьте"_id" суффикс к имени свойстваЕсли поле является коллекцией объектов, добавьте"_ids" суффикс к имени свойстваДля аннотации я думал что-то вроде обычая@JsonIdв идеале с необязательным значением для переопределения имени, как@JsonProperty делаетСвойство id должно быть определено пользователем, либо используя:Уже существующий джексон@JsonIdentityInfoИли путем создания другого класса или аннотации поляИли, решив, какую аннотацию проверитьid обнаружение свойств (полезно, например, для сценариев JPA)Объекты должны быть сериализованы с обернутым корневым значениемНазвания верблюжьих букв должны быть преобразованы в нижний регистр с подчеркиваниемВсе это должно быть десериализуемо (путем создания экземпляра только с установленным идентификатором)Пример

Учитывая эти POJO 's:

//Inform Jackson which property is the id
@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class,
    property = "id"
)
public abstract class BaseResource{
    protected Long id;

    //getters and setters
}

public class Resource extends BaseResource{
    private String name;
    @JsonId
    private SubResource subResource;
    @JsonId
    private List subResources;

    //getters and setters
}

public class SubResource extends BaseResource{
    private String value;

    //getters and setters
}

Возможная сериализацияResource экземпляр может быть:

{
    "resource":{
        "id": 1,
        "name": "bla",
        "sub_resource_id": 2,
        "sub_resource_ids": [
            1,
            2,
            3
        ]
    }
}
До сих пор...

требование# 5 может быть достигнуто путем настройкиObjectMapper следующим образом:

objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);

А затем с помощью@JsonRootName("example_root_name_here") в моем POJO 's.

требование# 6 может быть достигнуто путем настройкиObjectMapper следующим образом:

objectMapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);

Как вы можете видеть, есть еще много требований для выполнения. Для тех, кому интересно, зачем мне такая конфигурация,потому что яЯ разрабатываю веб-сервис REST дляember.js (точнее, Ember Data). Вы были бы очень признательны, если бы вы могли помочь с любым из требований.

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос