title: Spring Rest Controller Return Specific Fields
body: <p>I've been going through my head the best way to design a JSON API using Spring MVC. As we all know IO is expensive, and thus I don't want to make the client make several API calls to get what they need. However at the same time I don't necessarily want to return the kitchen sink.</p>
  
  <p>As an example I was working on a game API similar to IMDB but for video games instead.</p>
  
  <p>If I returned everything connected to Game it would look something like this.</p>
  
  <p>/api/game/1</p>
  
  <pre><code>{
      "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"
          }
      ]
  }
  </code></pre>
  
  <p>However they may not need all this information, but then again they might. Making calls for everything seems like a bad idea from I/O and performance.</p>
  
  <p>I thought about doing it by specifying include parameter in the requests. </p>
  
  <p>Now for example if you did not specify any includes all you would get back is the following.</p>
  
  <pre><code>{
      "id": 1,
      "title": "Call of Duty Advanced Warfare",
      "release_date": "2014-11-24"
  }
  </code></pre>
  
  <p>However it you want all the information your requests would look something like this.</p>
  
  <pre><code>/api/game/1?include=publishers,developers,platforms,reviews,esrbRating
  </code></pre>
  
  <p>This way the client has the ability to specify how much information they want. However I'm kind of at a loss the best way to implement this using Spring MVC.</p>
  
  <p>I'm thinking the controller would look something like this.</p>
  
  <pre><code>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?
  }
  </code></pre>
  
  <p>I'm not sure how you would optionally serialize the Game object. Is this even possible. What is the best way to approach this in Spring MVC?</p>
  
  <p>FYI, I am using Spring Boot which includes Jackson for serialization. </p>