Per the doc, @RestController is just a convenience annotation which combines @Controller and @ResponseBody and @GetMapping is a composed annotation that acts as a shortcut for @RequestMapping(method = RequestMethod.GET), which means @GetMapping should work well with both @RestController and @Controller
In fact @GetMapping only works with @RestController.
@RestController
public class HelloController {
@GetMapping("/")
public String hello(){
return "hello";
}
}
while
@Controller
public class HelloController {
@GetMapping("/")
public String hello(){
return "hello";
}
}
doesn't work.
I know I can use @RequestMapping(value = "/", method = RequestMethod.GET) instead, I'd just like to know why. Could someone give a clue?
CodePudding user response:
@Controller
public class TestController {
@GetMapping("/")
@ResponseBody
public String hello() {
return "hello";
}
}
Add the @ResponceBody annotation then, it will work.
- The @Controller annotation indicates that the class is a “Controller” e.g. a web controller
- The @RestController annotation indicates that the class is a controller where @RequestMapping methods assume @ResponseBody semantics by default i.e. servicing REST API.
