SpringMVC及注解介绍(一)
发布人:shili8
发布时间:2025-02-12 00:12
阅读次数:0
**Spring MVC 及 注解介绍 (一)****前言**
Spring MVC 是 Spring 框架中的一个关键组件,用于构建 Web 应用程序。它提供了一个松散耦合的、可扩展的框架,让开发者能够轻松地创建复杂的 Web 应用程序。在本文中,我们将介绍 Spring MVC 的基本概念和注解。
**什么是 Spring MVC**
Spring MVC 是一种 Model-View-Controller (MVC) 框架,它分离了应用程序的业务逻辑、数据模型和视图显示。这种分离使得开发者能够更容易地维护和扩展应用程序。
在 Spring MVC 中,Controller 负责处理 HTTP 请求并返回相应的响应。Model代表应用程序的数据模型,而 View 负责渲染 HTML 页面。
**Spring MVC 的注解**
Spring MVC 提供了许多注解,使得开发者能够轻松地创建 Controller、Model 和 View。下面是这些注解的介绍:
### **@Controller**
`@Controller` 注解标记一个类为 Spring MVC Controller。这个类负责处理 HTTP 请求并返回相应的响应。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } }
### **@RequestMapping**
`@RequestMapping` 注解用于映射 URL 到 Controller 的方法。这个注解可以指定 HTTP 请求的方法(如 GET、POST 等)。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } @PostMapping("/example") public String examplePost() { return "example-post"; } }
### **@RequestParam**
`@RequestParam` 注解用于从 HTTP 请求中获取参数。这个注解可以指定参数的名称和类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@RequestParam("name") String name) { return "example"; } }
### **@PathVariable**
`@PathVariable` 注解用于从 URL 中获取参数。这个注解可以指定参数的名称和类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example/{id}") public String example(@PathVariable("id") Long id) { return "example"; } }
### **@RequestBody**
`@RequestBody` 注解用于从 HTTP 请求体中获取 JSON 数据。这个注解可以指定数据的类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; @Controllerpublic class ExampleController { @PostMapping("/example") public String example(@RequestBody User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@SessionAttribute**
`@SessionAttribute` 注解用于从 Session 中获取属性。这个注解可以指定属性的名称和类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@SessionAttribute("name") String name) { return "example"; } }
### **@CookieValue**
`@CookieValue` 注解用于从 Cookie 中获取值。这个注解可以指定 Cookie 的名称和类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@CookieValue("name") String name) { return "example"; } }
### **@RequestHeader**
`@RequestHeader` 注解用于从 HTTP 请求头中获取值。这个注解可以指定请求头的名称和类型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@RequestHeader("User-Agent") String userAgent) { return "example"; } }
### **@ResponseStatus**
`@ResponseStatus` 注解用于指定 HTTP 响应状态码。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } @GetMapping("/error") @ResponseStatus(HttpStatus.NOT_FOUND) public String error() { return "error"; } }
### **@ExceptionHandler**
`@ExceptionHandler` 注解用于指定异常处理器。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } @GetMapping("/error") @ExceptionHandler(Exception.class) public String error(Exception e) { return "error"; } }
### **@InitBinder**
`@InitBinder` 注解用于指定绑定器。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } @InitBinder public void initBinder(WebDataBinder binder) { // do something } }
### **@Valid**
`@Valid` 注解用于指定验证器。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@Valid User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@ModelAttribute**
`@ModelAttribute` 注解用于指定模型属性。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@ModelAttribute("name") String name) { return "example"; } }
### **@Model**
`@Model` 注解用于指定模型。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@Model User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@View**
`@View` 注解用于指定视图。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@View("example") String name) { return "example"; } }
### **@Redirect**
`@Redirect` 注解用于指定重定向。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example() { return "example"; } @GetMapping("/redirect") @Redirect(value = "/example", params = {"name=John"}) public String redirect() { return "redirect"; } }
### **@Session**
`@Session` 注解用于指定会话。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@Session User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@Cookie**
`@Cookie` 注解用于指定 Cookie。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@Cookie User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@Request**
`@Request` 注解用于指定请求。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic class ExampleController { @GetMapping("/example") public String example(@Request User user) { return "example"; } } class User { private Long id; private String name; // getters and setters}
### **@Response**
`@Response` 注解用于指定响应。
java// ExampleController.javaimport org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controllerpublic