Обтекание результатов контроллера Spring Rest с помощью JsonView/MappingJacksonValue

У меня есть Spring API, который позволяет пользователю указывать JsonView для каждого вызова, используя такой параметр представления:

/api/v1/person/1?view=viewName

Затем я использую Spring MappingJacksonValue для динамической установки правильного представления вместо использования аннотации @JsonView(), и, наконец, я просто возвращаю экземпляр MappingJacksonValue, который создает что-то вроде строк

[
    { id: 1 },
    { id: 2 }
]

Я не могу понять, как легко обернуть мои экземпляры MappingJacksonValue в ObjectNode, чтобы я мог изменить все результаты API из приведенного выше фрагмента на этот

{
    "data" : [
        { id: 1 },
        { id: 2 }
    ]
}

Я пытался использовать обычный HashMap‹>, но это не сработало — сериализация полностью игнорирует представление MappingJacksonValue, а также выдает результаты, специфичные для карты.

{
    data: {
        value: [],
        serializationView: "com.blah.models.view.View$Id",
        filters: null,
        jsonpFunction: null
    }
}

Так может кто-нибудь, пожалуйста, дайте мне знать, как лучше всего добиться обертывания результатов в моем сценарии?

Заранее спасибо!


person RVP    schedule 18.04.2016    source источник


Ответы (1)


Если кто-то наткнется на этот пост, пытаясь сделать то же самое, я понял, что неправильно смотрю на проблему. В итоге я создал класс ServiceResponse и завернул туда объект вот так

public class ServiceResponse {

    @JsonView(View.Id.class)
    private Object data;

    public ServiceResponse (Object data) {
        this.data = data;
    }
}

Таким образом, вместо того, чтобы возвращать new MappingJacksonValue(someReturnObject), я возвращаю new MappingJacksonValue(new ServiceResponse(someReturnObject)). Таким образом, все красиво упаковано в объект data JSON, а метод setSerializationView по-прежнему правильно фильтрует мои объекты.

Надеюсь, это поможет кому-то.

person RVP    schedule 19.04.2016