Spring Rest Controller Devuelve campos específicos

He estado pensando en la mejor manera de diseñar una API JSON usando Spring MVC. Como todos sabemos, IO es costoso y, por lo tanto, no quiero que el cliente realice varias llamadas a la API para obtener lo que necesita. Sin embargo, al mismo tiempo, no necesariamente quiero devolver el fregadero de la cocina.

Como ejemplo, estaba trabajando en una API de juegos similar a IMDB pero para videojuegos.

Si devolviera todo lo relacionado con el Juego, se vería así.

/ api / game / 1

{
    "id": 1,
    "title": "Call of Duty Advanced Warfare",
    "release_date": "2014-11-24",
    "publishers": [
        {
            "id": 1,
            "name": "Activision"
        }
    ],
    "developers": [
        {
            "id": 1,
            "name": "Sledge Hammer"
        }
    ],
    "platforms": [
        {
            "id": 1,
            "name": "Xbox One",
            "manufactorer": "Microsoft",
            "release_date": "2013-11-11"
        },
        {
            "id": 2,
            "name": "Playstation 4",
            "manufactorer": "Sony",
            "release_date": "2013-11-18"
        },
        {
            "id": 3,
            "name": "Xbox 360",
            "manufactorer": "Microsoft",
            "release_date": "2005-11-12"
        }
    ],
    "esrbRating": {
        "id": 1,
        "code": "T",
        "name": "Teen",
        "description": "Content is generally suitable for ages 13 and up. May contain violence, suggestive themes, crude humor, minimal blood, simulated gambling and/or infrequent use of strong language."
    },
    "reviews": [
        {
            "id": 1,
            "user_id": 111,
            "rating": 4.5,
            "description": "This game is awesome"
        }
    ]
}

Sin embargo, es posible que no necesiten toda esta información, pero de nuevo podrían hacerlo. Hacer llamadas para todo parece una mala idea de E / S y rendimiento.

Pensé en hacerlo especificando el parámetro de inclusión en las solicitudes.

Ahora, por ejemplo, si no especificó ninguna inclusión, todo lo que obtendría es lo siguiente.

{
    "id": 1,
    "title": "Call of Duty Advanced Warfare",
    "release_date": "2014-11-24"
}

Sin embargo, si desea toda la información, sus solicitudes se verían así.

/api/game/1?include=publishers,developers,platforms,reviews,esrbRating

De esta manera, el cliente tiene la capacidad de especificar cuánta información desea. Sin embargo, estoy un poco perdido la mejor manera de implementar esto usando Spring MVC.

Estoy pensando que el controlador se vería así.

public @ResponseBody Game getGame(@PathVariable("id") long id, 
    @RequestParam(value = "include", required = false) String include)) {

        // check which include params are present

        // then someone do the filtering?
}

No estoy seguro de cómo serializaría opcionalmente el objeto Juego. ¿Es esto posible? ¿Cuál es la mejor manera de abordar esto en Spring MVC?

FYI, estoy usando Spring Boot que incluye a Jackson para la serialización.

Respuestas a la pregunta(2)

Su respuesta a la pregunta