Проблема
У меня есть приложение Spring MVC, которое требует от меня перевести id и имена списка определенного объекта в массив объектов JSON с определенным форматированием и вывести его по определенному запросу. То есть, мне нужен массив объектов JSON, например:
{
label: Subject.getId()
value: Subject.getName()
}
Для удобного использования с плагином jQuery Autocomplete.
Итак, в моем контроллере я написал следующее:
@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, но я не мог найти правильное использование их внутри контекста где-нибудь.
Вопрос
Каков правильный способ использования Джексона для достижения сериализации, которую я хочу? Обратите внимание, что важно, чтобы сущности были сериализованы таким образом в этом контексте и открывались для другой сериализации в другом месте