Difference between @Controller and @RestController annotation

Spring’s @Controller and @RestController Annotations

Controller : In Spring the incoming request are handled by the controllers, in terms of a web based application it is the servlet which is responsible for identifying a correct controller url.

S.No@Controller@RestController
1Typically used in spring mvc applicationsTypically Used in RESTful Web Services/AJAX calls which demand response in specific format like(eg: json, xml).
2It is just @Controller , response body need to be added explicitly.It is a combination of @Controller + @ResponseBody,
It does the job in single statement.
3It typically sends data to a view resolver in html format and is used with technologies like the JSP or FTL.
To send response to REST based or AJAX calls @ResponseBody annotation is used along with @Controller.
It typically sends data back to applications like REST based or AJAX calls which is actually looking for a JSON type response and does not rely on view resolvers.
In such cases use @RestController
4If you see the code within.

@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Controller { //….. }
If you see the code within.

@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { //….. }

Examples

1. @Controller – Usage in spring mvc application

@Controller
@RequestMapping("department")
public class DepartmentController
{
    @RequestMapping(value = "/{name}", method = RequestMethod.GET)
    public Department getDepartmentByName(@PathVariable String name, Model model) {
  
        //pull data, set in model and then return the template
  
        return departmentTemplate;
    }
}        
        

2. @Controller + @ResponseBody in spring

@Controller
@ResponseBody
@RequestMapping("department")
public class DepartmentController
{
    @RequestMapping(value = "/{name}", method = RequestMethod.GET, 
                    produces ="application/json")
    public Department getDepartmentByName(@PathVariable String name) {
  
        //pull data, set model and then return Object model in json format
  
        return department;
    }
}
        

3. @RestController in spring

@RestController
@RequestMapping("department")
public class DepartmentController
{
    @RequestMapping(value = "/{name}", method = RequestMethod.GET, 
                    produces ="application/json")
    public Department getDepartmentByName(@PathVariable String name) {
  
        //pull data, set model and then return Object model in json format
  
        return department;
    }
}                
        

This code does the same job as in example 2 , here we use single annotation(@RestController) instead of two(@Controller, @ResponseBody).

Spring’s @RequestMapping annotation

This annotation is used to provide routing information or you can understand in a simple way it allows application to understand different apis with the help of URL, a unique URL for every api.

A sample code is here:

@RestController  
public class HomeController {  
@RequestMapping(value = "/allDepartmentNames", method = "GET")  

    public List getAllDepartmentName(){  
  //….
        return list;  
    }  
}                
        

Summary

In this spring boot annotations tutorial you have learnt about annotations and auto configuration features of spring boot. These are few of the most in use annotations which you might surely use in your spring boot application. Hope you liked it !


Leave a Comment