在Spring MVC中,@Controller和@RestController注释都用于根据MVC设计模式定义Web控制器。控制器负责处理HTTP请求并向客户端返回HTTP响应。
这两个注释之间的主要区别在于它们如何处理客户端的请求以及何时使用它们
例如,@Controller,它用于将类标记为Web控制器以处理HTTP请求并返回视图名称,然后由视图解析器解析以生成最终的HTML视图。
另一方面,@RestController 在Spring 3.4等更高版本中添加,以增加对REST API开发的支持。在REST API的情况下,您可能会喜欢返回JSON或XML,而不是返回HTML。
如果你想从Spring MVC控制器返回JSON或XML,那么你需要将@ReseponseBody 添加到每个Controller方法中,在使用Spring和SpringBoot实现REST API时,这似乎有些过头了。
Spring Framework的设计人员和开发人员认识到了这个缺点,然后在Spring 3.4版本中添加了一个名为@RestController的新注释。
@RestController 是@Controller和@ResponseBody的组合,您可以使用它在Java和SpringBoot中实现REST API。
@Controler和@RestController之间的主要区别是@ResponseBody,@Controler不会自动将@ResponseBody添加到控制器的所有方法中,这意味着如果您想要返回JSON或XML响应,则需要将其单独添加到每个方法中。@RestController将自动添加到所有控制器的方法中。
Spring框架中@Controller和@RestController 的示例:
@Controller
public class TestController {
@Autowired
private TestService testService;
@RequestMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", testService.getHelloMessage());
return "hello";
}
}
在上例中,MyController类使用@Controller注释进行注释,并具有单个方法sayHello(),该方法映射到/hello URL。
该方法接受一个Model对象作为参数,并向其添加一个名为"message"的属性。然后该方法返回一个字符串“hello”,这是要呈现的视图的名称。
@RestController annotation的示例
@RestController
public class TestRestController {
@Autowired
private TestService testService;
@RequestMapping("/greeting")
public Greeting getGreeting() {
return testService.getGreeting();
}
}
在本例中,TestRestController类使用@RestController进行注释,并且有一个映射到getGreeting() URL的方法/greeting。
该方法返回一个Greeting类的对象,该对象将自动转换为JSON或XML表示,并作为响应发送给客户端。
同样值得注意的是,对于您希望包含在响应中的数据,Greeting类应该具有getters和setters,否则,它将无法正确序列化或转换为JSON。
本文讲述了SpringMVC中@Controller和@RestController注解的用途,强调了两者在处理HTTP请求和返回类型上的差异,以及何时选择哪个注解。@Controller适用于返回HTML视图,而@RestController在Spring3.4后支持RESTAPI,自动处理JSON和XML返回。

被折叠的 条评论
为什么被折叠?



