@Controller和@RestController的区别

2023-11-30 21:32:22 浏览数 (1)

@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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞