Ниже приведен фрагмент из проекта на основе Spring Web MVC 3.1.1. Сериализация Json производится через Jackson.Spring 3.1.1 web MVC - ограничение ответа на интерфейсные модули
У меня есть контроллер, который сопоставляется с URL-адресом, и все работает нормально.
@Controller
@RequestMapping("/vod")
public class VODController {
private Configuration configuration;
private SearchAPI searchAPI;
@RequestMapping(method = RequestMethod.GET, params = "cmd=list")
public @ResponseBody GetAssetsReply listVODAssets(long offset, int limit) {
SearchVODAssetRequest searchVODAssetRequest = new SearchVODAssetRequest();
//.... some irrelevant code
return searchAPI.searchVODAssets(searchVODAssetRequest);
}
}
И это GetAssetsReply
:
public class GetAssetsReply {
private long totalAssets;
private List<VODAsset> assets = new LinkedList<VODAsset>();
// Getters and setters removed for simplicity
}
VODAsset
является интерфейсом:
public interface VODAsset {
public String getName();
}
И это его реализация:
public class AssetElement implements VODAsset {
private String id;
private String name;
private double duration;
// Getters and setters removed for simplicity
}
Наконец к вопрос: Контроллер возвращает мне ожидаемый результат с одной нижней стороной - он возвращает активы VOD с его идентификатором и длительностью в дополнение к его имени. Я бы ожидал получить только имя из-за того, что объект указан указанным выше интерфейсом VODAsset
. Как я могу получить это поведение? Любая помощь была бы очень благодарна
Благодарим за быстрый ответ. Я использовал 2 вещи: 1. Я добавил на интерфейс '@JsonAutoDetect (JsonMethod.NONE)' 2. Я добавил в метод 'getName' интерфейса' @ JsonProperty' интерфейса, который эффективно удалил все остальные поля из стратегии сериализации json , Должен ли я отредактировать ваш ответ и принять его? не знаю, как это работает ..... – henryabra
и да, я не упоминал об этом на вопрос о Джексоне. Nice catch :) – henryabra
@henryabra Вы можете обновить ответ. :) –