前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@Controller和@RestController的区别

@Controller和@RestController的区别

原创
作者头像
刺槐儿
修改2023-11-30 21:32:22
7390
修改2023-11-30 21:32:22
举报
文章被收录于专栏:技术路线技术路线
@Controller: 返回指定页面

  • @Controller 用于定义一个控制器类,它通常用于处理用户的HTTP请求,并返回相应的视图(View)。
  • @Controller类中的方法可以直接通过返回String跳转到JSP、HTML等模版页面。Spring会根据视图名解析出实际的视图,通常是一个HTML页面。
  • 在方法上加@ResponseBody注解,也可以返回实体对象。
  • 方法上的 @RequestMapping 或者其他映射注解(如 @GetMapping、@PostMapping 等)用于将特定的请求映射到相应的处理方法。
@RestController: 返回数据
  • @RestController注解等价于@ResponseBody + @Controller。表示该控制器中的所有方法都返回数据而不是视图。
  • 将每个方法的返回值直接作为 HTTP 响应的内容,而不经过视图解析器。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
  • @RestContoller类中相当于所有方法都自带@ResponseBody,会自动将方法的返回值转换为JSON格式的响应体返回给客户端。但也可以通过其他注解(如 @ResponseBody)来改变返回的数据格式。
  • @RestController如果想跳转页面,可以使用ModelAndView进行封装。
共同点

@RestController和@Controller的共同点是都用来表示Spring某个类是否可以接收HTTP请求。

案例

1. @Controller 注解:
代码语言:java
复制
@Controller
public class MyController {

    @RequestMapping("/hello")
    public String hello() {
        return "helloPage"; 		// 返回视图名
    }

    @RequestMapping("/hello")
    @ResponseBody 
        return "Hello, World!";	 	// 直接返回数据
    }
    
}

代码中的 @ResponseBody 注解告诉Spring框架,方法的返回值应该直接作为HTTP响应的主体内容,而不是通过视图解析器解析成视图。

2. @RestController 注解:
代码语言:java
复制
@RestController
public class MyRestController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!"; // 直接返回数据
    }
}

总的来说,主要区别在于 @Controller 用于传统的基于视图的控制器,而 @RestController 用于返回数据的控制器,通常用于构建RESTful风格的API。选择使用哪个取决于应用的需求,如果你的控制器主要负责处理和返回数据而不是渲染视图,那么 @RestController 是更合适的选择。

SpringMVC常用注解

注解

说明

@RequestMapping

用于映射请求路径url到处理器,可以定义在类上和方法上。

@ResponseBody

实现将controller方法返回对象转化为json对象响应给客户端

@RequestBody

实现接收http请求的json数据,将json转换为java对象

@RequestParam

用于从请求的参数中获取值,并将其绑定到方法的参数上

@PathViriable

从请求路径URL下中获取请求参数值(/user/{id}),传递给方法的形式参数

@RequestHeader

获取指定的请求头数据

@PathViriable

从请求路径URL下中获取请求参数值(/user/{id}),传递给方法的形式参数

@RestController

@Controller + @ResponseBody

@ResponseBody注解

@ResponseBody 是 Spring MVC 中的一个注解,它通常用于控制器方法上,用于指示方法返回的对象应该直接作为 HTTP 响应的主体部分,而不进行视图解析。这个注解告诉 Spring 框架不要将方法的返回值解析为视图,而是直接将其转换为响应的主体内容。

@RequestBody

@RequestBody 是 Spring MVC 中的一个注解,用于将请求的HTTP体(body)部分映射到方法的参数上。通常用于处理POST请求中的JSON或XML格式的数据。

当使用 @RequestBody 注解时,Spring MVC 会尝试将请求体的内容转换为指定的方法参数类型。这样,你就可以直接获取请求体中的数据,并在方法中进行处理。

@RequestParam

@RequestParam 是 Spring MVC 中用于从请求中提取参数的注解。它可以用在方法的参数上,将请求中的参数值映射到方法的参数上。

@RequestParam 注解提供了多种属性,可以根据实际需求进行配置,如 namevaluedefaultValuerequired 等。这使得处理请求参数变得更加灵活。

@PathViriable

在 Spring MVC 中,@PathVariable 是一个用于从 URI 中提取模板变量值的注解。模板变量是在 URI 中用花括号 {} 包裹的占位符。@PathVariable 注解允许你将这些占位符的值映射到方法的参数上。

@RequestMapping

@RequestMapping 是 Spring MVC 中用于映射请求路径的注解。它可以应用在类级别和方法级别,用于定义控制器类或方法处理哪些URL路径的请求。

@RequestHeader

@RequestHeader 是 Spring MVC 中的一个注解,用于从 HTTP 请求的头部信息中提取数据并映射到方法的参数上。通过这个注解,你可以访问请求头中的各种信息,例如User-Agent、Content-Type等。

@RequestHeader 注解提供了多种属性,使你可以根据实际需求进行配置,如 valuenamerequired 等。通过这个注解,你可以轻松地在方法中访问 HTTP 请求头的信息。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @Controller: 返回指定页面
  • @RestController: 返回数据
  • 共同点
  • 案例
    • 1. @Controller 注解:
      • 2. @RestController 注解:
      • SpringMVC常用注解
        • @ResponseBody注解
          • @RequestBody
            • @RequestParam
              • @PathViriable
                • @RequestMapping
                  • @RequestHeader
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档