DEV Community

Anh Trần Tuấn
Anh Trần Tuấn

Posted on • Originally published at tuanh.net on

What is the Difference Between @Controller and @RestController in Spring MVC?

1. Understanding the Basics

Before diving into the differences, it’s essential to comprehend what @Controller and @RestController represent.

1.1 What is @Controller?

@Controller is an annotation used in Spring MVC to indicate that a particular class serves the role of a controller in the Model-View-Controller (MVC) design pattern. It is responsible for handling HTTP requests and returning a view, typically an HTML page, to the client.

@Controller
public class MyController {
    @GetMapping("/greet")
    public String greet(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "greeting";
    }
}
Enter fullscreen mode Exit fullscreen mode

In this example, the greet method returns the name of a view (greeting), which will be resolved to an HTML page by a view resolver.

1.2 What is @RestController?

@RestController is a specialized version of @Controller. It is a convenience annotation that combines @Controller and @ResponseBody. This means that instead of returning a view, it directly returns the data as a JSON or XML response.

@RestController
public class MyRestController {
    @GetMapping("/greet")
    public String greet() {
        return "Hello, World!";
    }
}
Enter fullscreen mode Exit fullscreen mode

In this case, the greet method returns a simple string, which will be serialized to JSON and sent back to the client.

2. Key Differences Between @Controller and @RestController

2.1 View Rendering vs. Data Serialization

The most significant difference between @Controller and @RestController lies in how they handle the return values of methods.

  • @Controller : The method’s return value is typically the name of a view, and Spring MVC resolves this view to render an HTML page. It’s designed for creating web pages and handling web form submissions.
  • @RestController : The method’s return value is automatically serialized into the desired format (e.g., JSON or XML) and returned directly to the client. It’s primarily used in RESTful web services to send data to the client rather than HTML views.

2.2 Combining with @ResponseBody

@RestController is essentially a combination of @Controller and @ResponseBody. This means that every method in a class annotated with @RestController will have its return value serialized into the response body, eliminating the need to annotate each method with @ResponseBody.

In contrast, with @Controller , you need to explicitly annotate each method with @ResponseBody if you want to return JSON or XML data.

@Controller
public class MyController {
    @GetMapping("/data")
    @ResponseBody
    public String getData() {
        return "Some data";
    }
}
Enter fullscreen mode Exit fullscreen mode

This code does the same as @RestController , but you need to include @ResponseBody for every method.

2.3 Use Cases

  • @Controller : Use this when building a traditional web application where you need to return views (HTML pages). It’s best suited for MVC applications.
  • @RestController : Use this when building RESTful web services or APIs. It’s designed to return data in formats like JSON, XML, etc., directly to the client.

3. Conclusion

Understanding the difference between @Controller and @RestController is fundamental when developing web applications with Spring MVC. @Controller is ideal for returning views in traditional web applications, while @RestController simplifies the creation of RESTful services by returning data directly in formats like JSON or XML.

If you have any questions or need further clarification, feel free to leave a comment below!

Read posts more at : What is the Difference Between @Controller and @RestController in Spring MVC?

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more