@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 注解提供了多种属性,可以根据实际需求进行配置,如 name、value、defaultValue、required 等。这使得处理请求参数变得更加灵活。
@PathViriable
在 Spring MVC 中,@PathVariable 是一个用于从 URI 中提取模板变量值的注解。模板变量是在 URI 中用花括号 {} 包裹的占位符。@PathVariable 注解允许你将这些占位符的值映射到方法的参数上。
@RequestMapping
@RequestMapping 是 Spring MVC 中用于映射请求路径的注解。它可以应用在类级别和方法级别,用于定义控制器类或方法处理哪些URL路径的请求。
@RequestHeader
@RequestHeader 是 Spring MVC 中的一个注解,用于从 HTTP 请求的头部信息中提取数据并映射到方法的参数上。通过这个注解,你可以访问请求头中的各种信息,例如User-Agent、Content-Type等。
@RequestHeader 注解提供了多种属性,使你可以根据实际需求进行配置,如 value、name、required 等。通过这个注解,你可以轻松地在方法中访问 HTTP 请求头的信息。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!