Campos específicos do retorno do controlador de descanso de mola

Estou pensando na melhor maneira de criar uma API JSON usando o Spring MVC. Como todos sabemos, o IO é caro e, portanto, não quero que o cliente faça várias chamadas de API para obter o que precisa. No entanto, ao mesmo tempo, não quero necessariamente devolver a pia da cozinha.

Como exemplo, eu estava trabalhando em uma API de jogo semelhante ao IMDB, mas para videogames.

Se eu retornasse tudo conectado ao Game, seria algo parecido com isto.

/ 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"
        }
    ]
}

No entanto, eles podem não precisar de todas essas informações, mas novamente podem precisar. Fazer chamadas para tudo parece uma má ideia de E / S e desempenho.

Pensei em fazê-lo especificando o parâmetro include nos pedidos.

Agora, por exemplo, se você não especificou nenhuma inclusão, tudo o que você recuperaria é o seguinte.

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

No entanto, você deseja que todas as informações que seus pedidos sejam mais ou menos assim.

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

Dessa forma, o cliente pode especificar a quantidade de informações que deseja. No entanto, estou meio perdida, a melhor maneira de implementar isso usando o Spring MVC.

Estou pensando que o controlador seria algo parecido com isto.

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?
}

Não sei como você opcionalmente serializaria o objeto Game. Isso é possível? Qual é a melhor maneira de abordar isso no Spring MVC?

Para sua informação, estou usando o Spring Boot, que inclui Jackson para serialização.

questionAnswers(2)

yourAnswerToTheQuestion