Spring Rest Controller Return Specific Fields Spring Rest Controller Return Specific Fields spring spring

Spring Rest Controller Return Specific Fields


Instead of returning a Game object, you could serialize it as as a Map<String, Object>, where the map keys represent the attribute names. So you can add the values to your map based on the include parameter.

@ResponseBodypublic Map<String, Object> getGame(@PathVariable("id") long id, String include) {    Game game = service.loadGame(id);    // check the `include` parameter and create a map containing only the required attributes    Map<String, Object> gameMap = service.convertGameToMap(game, include);    return gameMap;}

As an example, if you have a Map<String, Object> like this:

gameMap.put("id", game.getId());gameMap.put("title", game.getTitle());gameMap.put("publishers", game.getPublishers());

It would be serialized like this:

{  "id": 1,  "title": "Call of Duty Advanced Warfare",  "publishers": [    {        "id": 1,        "name": "Activision"    }  ]}


Being aware that my answer comes quite late: I'd recommend to look at Projections.

What you're asking for is what projections are about.

Since you're asking about Spring I'd give this one a try: https://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts


This can be done by Spring Projections. Also works fine with Kotlin.Take a look here: https://www.baeldung.com/spring-data-jpa-projections