Bird
Raised Fist0
Spring Bootframework~10 mins

@RestController annotation in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - @RestController annotation
Start Spring Boot App
↓
Scan for @RestController
↓
Create Controller Bean
↓
Map HTTP Requests to Methods
↓
Execute Method on Request
↓
Return Data as JSON
↓
Send JSON Response to Client
The Spring Boot app starts, finds classes with @RestController, creates them, maps HTTP requests to their methods, executes those methods, and returns JSON responses.
Execution Sample
Spring Boot
@RestController
public class HelloController {
  @GetMapping("/hello")
  public Map<String, String> sayHello() {
    return Map.of("message", "Hello World");
  }
}
Defines a REST controller that responds to GET /hello with JSON {"message":"Hello World"}.
Execution Table
StepActionEvaluationResult
1Start Spring Boot appApp startsSpring context initializes
2Scan classes for @RestControllerFind HelloControllerCreate HelloController bean
3Map HTTP GET /helloMethod sayHello foundMapping stored
4Receive HTTP GET /hello requestMatch to sayHello methodInvoke sayHello()
5Execute sayHello()Return Map.of("message", "Hello World")Response body set to {"message":"Hello World"}
6Send responseResponse body sent as JSONClient receives {"message":"Hello World"}
7No more requestsApp waitsIdle
💡 No more HTTP requests; app remains running waiting for new requests.
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 5Final
HelloController beannullCreated instanceInstance readyInstance method executedInstance ready
HTTP RequestnonenoneGET /hello receivedHandlednone
Response Bodyemptyemptyempty{"message":"Hello World"}{"message":"Hello World"}
Key Moments - 2 Insights
Why does the method return a Map but the client receives JSON?
Because @RestController tells Spring to convert the return value to JSON automatically, as shown in execution_table step 5 where the Map is serialized to JSON for the response body.
What happens if we remove @RestController but keep @GetMapping?
Spring won't create the controller bean or map requests properly, so no response is sent. This is shown in execution_table step 2 where the bean creation depends on @RestController.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens at step 3?
AThe app sends the response to the client
BSpring maps the HTTP GET /hello to the sayHello method
CThe HelloController bean is created
DThe app starts running
💡 Hint
Check the 'Action' and 'Result' columns at step 3 in execution_table
At which step does the method sayHello() actually run?
AStep 5
BStep 2
CStep 4
DStep 6
💡 Hint
Look for 'Execute sayHello()' in the 'Action' column in execution_table
If the @RestController annotation is missing, what changes in the execution_table?
AStep 4 would still invoke sayHello()
BStep 5 would return JSON anyway
CStep 2 bean creation would not happen
DStep 6 would send a different response
💡 Hint
Refer to key_moments about bean creation depending on @RestController
Concept Snapshot
@RestController marks a class as a REST API controller.
Spring creates a bean and maps HTTP requests to its methods.
Returned values are automatically converted to JSON.
Use @GetMapping, @PostMapping etc. inside it.
No need for @ResponseBody on each method.
Ideal for building RESTful web services.
Full Transcript
The @RestController annotation in Spring Boot marks a class as a REST API controller. When the app starts, Spring scans for classes with this annotation and creates beans for them. It then maps HTTP requests like GET or POST to the methods inside these classes. When a request comes in, Spring calls the matching method and takes its return value. Because of @RestController, Spring automatically converts this return value to JSON and sends it back as the HTTP response. This makes it easy to build web APIs that return data in JSON format without extra code. For example, a method returning a Map will send that Map serialized as a JSON response. If @RestController is missing, Spring won't create the controller bean or map requests, so the API won't work. This flow helps developers quickly create RESTful services.

Practice

(1/5)
1. What is the main purpose of the @RestController annotation in Spring Boot?
easy
A. To create HTML views for web pages
B. To define a service class for business logic
C. To create a controller that returns data directly as JSON or XML
D. To configure database connections

Solution

  1. Step 1: Understand the role of @RestController

    @RestController is used to create REST APIs that return data directly, usually in JSON or XML format.
  2. Step 2: Compare with other options

    Creating HTML views is handled by MVC controllers, defining service classes by @Service, and configuring database connections elsewhere in Spring Boot.
  3. Final Answer:

    To create a controller that returns data directly as JSON or XML -> Option C
  4. Quick Check:

    @RestController = returns data directly [OK]
Hint: Remember: @RestController returns data, not HTML pages [OK]
Common Mistakes:
  • Confusing @RestController with @Service
  • Thinking it renders HTML views
  • Assuming it configures database
2. Which of the following is the correct way to declare a Spring Boot REST controller?
easy
A. @Service public class MyController {}
B. @Controller public class MyController {}
C. @RestService public class MyController {}
D. @RestController public class MyController {}

Solution

  1. Step 1: Identify the correct annotation for REST controllers

    @RestController is the correct annotation to create REST APIs in Spring Boot.
  2. Step 2: Check other annotations

    @Controller is for MVC controllers returning views, @RestService is not a valid annotation, and @Service is for service classes.
  3. Final Answer:

    @RestController public class MyController {} -> Option D
  4. Quick Check:

    Correct REST controller syntax = @RestController public class MyController {} [OK]
Hint: Use @RestController for REST APIs, not @Controller [OK]
Common Mistakes:
  • Using @Controller instead of @RestController
  • Using non-existent @RestService annotation
  • Confusing @Service with controller annotations
3. Given the following code, what will be the output when accessing /hello endpoint?
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring!";
    }
}
medium
A. An HTML page displaying "Hello, Spring!"
B. A plain text response with the string "Hello, Spring!"
C. A 404 Not Found error
D. A compilation error due to missing annotations

Solution

  1. Step 1: Understand @RestController behavior

    @RestController returns the method's return value directly as the response body, usually JSON or plain text.
  2. Step 2: Analyze the method return

    The method returns a String "Hello, Spring!" which will be sent as plain text in the response body.
  3. Final Answer:

    A plain text response with the string "Hello, Spring!" -> Option B
  4. Quick Check:

    @RestController + String return = plain text response [OK]
Hint: @RestController returns method data as response body [OK]
Common Mistakes:
  • Expecting an HTML page instead of data
  • Thinking it causes 404 without mapping
  • Assuming compilation error without reason
4. Identify the error in this Spring Boot REST controller code:
@RestController
public class UserController {
    @GetMapping("/user")
    public User getUser() {
        User user = new User();
        user.setName("Alice");
        return user;
    }
}
Assume User is a simple POJO with a name field and getters/setters.
medium
A. No error; code will return User object as JSON
B. User class must be annotated with @Entity
C. Missing @ResponseBody annotation on getUser() method
D. Missing @RequestMapping on class level

Solution

  1. Step 1: Check @RestController effect

    @RestController automatically adds @ResponseBody to all methods, so no need to add it explicitly.
  2. Step 2: Verify User class requirements

    User is a POJO; it does not need @Entity unless used with database. Returning it will serialize to JSON automatically.
  3. Final Answer:

    No error; code will return User object as JSON -> Option A
  4. Quick Check:

    @RestController auto @ResponseBody = No error; code will return User object as JSON [OK]
Hint: @RestController adds @ResponseBody automatically [OK]
Common Mistakes:
  • Adding unnecessary @ResponseBody on methods
  • Confusing @Entity with serialization
  • Thinking class-level @RequestMapping is mandatory
5. You want to create a REST API that returns a list of users as JSON. Which of the following code snippets correctly uses @RestController to achieve this?
hard
A. @RestController public class UserApi { @GetMapping("/users") public List<String> getUsers() { return List.of("Alice", "Bob", "Carol"); } }
B. @RestController public class UserApi { @GetMapping("/users") public String getUsers() { return "Alice, Bob, Carol"; } }
C. @Controller public class UserApi { @GetMapping("/users") public List<String> getUsers() { return List.of("Alice", "Bob", "Carol"); } }
D. @RestController public class UserApi { @RequestMapping("/users") public void getUsers() { System.out.println("Alice, Bob, Carol"); } }

Solution

  1. Step 1: Check @RestController and return type

    @RestController public class UserApi { @GetMapping("/users") public List<String> getUsers() { return List.of("Alice", "Bob", "Carol"); } } uses @RestController and returns a List<String>, which Spring Boot converts to JSON automatically.
  2. Step 2: Analyze other options

    The snippet returning String sends a plain string, not a JSON list. The snippet using @Controller attempts to resolve a view name, not return JSON data. The snippet with void return type sends no response body, only prints to console.
  3. Final Answer:

    @RestController public class UserApi { @GetMapping("/users") public List<String> getUsers() { return List.of("Alice", "Bob", "Carol"); } } -> Option A
  4. Quick Check:

    @RestController + List return = JSON list [OK]
Hint: Return List with @RestController for JSON array response [OK]
Common Mistakes:
  • Using @Controller instead of @RestController for JSON
  • Returning void or printing instead of returning data
  • Returning plain string instead of list for JSON array
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard