Spring中@Controller与@RestController的区别

在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类应该具有getterssetters,否则,它将无法正确序列化或转换为JSON。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值