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 |
|---|---|---|
| 1 | Typically used in spring mvc applications | Typically Used in RESTful Web Services/AJAX calls which demand response in specific format like(eg: json, xml). |
| 2 | It is just @Controller , response body need to be added explicitly. | It is a combination of @Controller + @ResponseBody, It does the job in single statement. |
| 3 | It 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 |
| 4 | If 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 !