Использование @JsonSerialize и JsonSerializer

Проблема

У меня есть приложение Spring MVC, которое требует, чтобы я переводил идентификаторы и имена списка определенной сущности в массив объектов JSON с определенным форматированием и выводил это по определенному запросу. Мне нужен массив объектов JSON вроде этого:

{
     label: Subject.getId()
     value: Subject.getName()
}

Для удобства использования с jQuery Auto полный плагин.

Итак, в своем контроллере я написал следующее:

@RequestMapping(value = "/autocomplete.json", method = RequestMethod.GET)
@JsonSerialize(contentUsing=SubjectAutocompleteSerializer.class)
public @ResponseBody List<Subject> autocompleteJson() {
    return Subject.findAllSubjects();
}

// Internal class
public class SubjectAutocompleteSerializer extends JsonSerializer<Subject> {

    @Override
    public void serialize(Subject value, JsonGenerator jgen, SerializerProvider provider)
            throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeStringField("label", value.getId().toString());
        jgen.writeStringField("value", value.getName());
        jgen.writeEndObject();
    }

}

JSON, который я получил, однако, представляет собой сериализацию по умолчанию, предложенную Джексоном. Мой пользовательский сериализатор, похоже, полностью игнорируется. Очевидно, проблема заключается в неправильном использовании @JsonSerialize или JsonSerializer, но я нигде не мог найти их правильного использования в контексте.

Вопрос

Как правильно использовать Jackson для достижения желаемой сериализации? Обратите внимание, что важно, чтобы сущности только сериализовались таким образом в этом контексте и были открыты для другой сериализации в другом месте

12
задан DCKing 8 August 2011 в 21:47
поделиться