这篇文章主要介绍了SpringMVC一些常用注解,详细介绍了每一个注解的使用方法
1、@Controller
@Controller注解将一个普通的Java类标记为处理请求的控制器,在Spring MVC中起到了路由请求和处理业务逻辑的作用,并注册为Spring容器的Bean。通过扫描或显式配置等方式,让Spring能够自动检测到这个控制器并进行实例化和管理。
2、@RequestMapping
@RequestMapping注解用于将一个HTTP请求映射到控制器类或处理请求的方法上,告诉Spring MVC如何匹配和处理请求。
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/profile") public String userProfile() { // 处理用户个人资料请求 return "profile"; } }
3.@GetMapping、@PostMapping、@PutMapping、@DeleteMapping
1.@GetMapping: 处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)
新方法可以简写为:
@GetMapping(“/get/{id}”)
2.@PostMapping: 处理post请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”,method = RequestMethod.POST)
新方法可以简写为:
@PostMapping(“/get/{id}”)
3. @PutMapping: 和PostMapping作用等同,都是用来向服务器提交信息。如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。
**4.@DeleteMapping **删除URL映射,具体没有再实践中用过,不知道好在什么地方
**5.@PatchMapping ** PATCH 请求通常用于对资源进行部分更新。
@RestController @RequestMapping("/users") public class UserController { @PatchMapping("/{id}") public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody User updatedUser) { // 根据 id 获取要更新的用户信息 User user = userRepository.findById(id); if (user == null) { return ResponseEntity.notFound().build(); } // 更新用户信息 user.setName(updatedUser.getName()); user.setEmail(updatedUser.getEmail()); // 保存更新后的用户信息 userRepository.save(user); return ResponseEntity.ok().build(); } }
4. @RequestParam
@RequestParam 是 Spring MVC 框架中的一个注解,用于将请求参数绑定到处理请求的方法的参数上。
使用 @RequestParam 注解时,可以在处理请求的方法的参数前添加该注解,并指定参数名。Spring MVC 在接收到请求时,会自动将请求中对应名称的参数值绑定到方法参数上。
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/search") public ResponseEntity<List<User>> searchUsers(@RequestParam("name") String name, @RequestParam("age") int age) { // 根据姓名和年龄搜索用户列表 List<User> userList = userService.searchUsers(name, age); return ResponseEntity.ok(userList); } }
@RequestParam 注解有一些属性可以进一步配置参数的行为,例如设置参数是否是必需的、设置默认值等。
@GetMapping("/search") public ResponseEntity<List<User>> searchUsers( @RequestParam(value = "name", required = true) String name, @RequestParam(value = "age", defaultValue = "0") int age) { // ... }
required = true 表示参数必需,如果请求中没有该参数,则会返回 400 Bad Request 错误;defaultValue = “0” 表示如果请求中没有提供该参数,则将参数默认值设置为 0。
5.@PathVariable
@PathVariable 是 Spring MVC 框架中的一个注解,用于将请求路径中的变量绑定到处理请求的方法的参数上。
使用 @PathVariable 注解时,可以在处理请求的方法的参数前添加该注解,并指定路径中的变量名称。Spring MVC 在接收到请求时,会自动从路径中提取对应名称的变量值,并将其绑定到方法参数上。
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { // 根据用户id查询用户信息 User user = userService.getUserById(id); if (user == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(user); } }
@PathVariable 注解还支持一些属性进行进一步的配置,例如设置变量的默认值、正则表达式等。
@GetMapping("/{id}/{username}") public ResponseEntity<User> getUserByUsername( @PathVariable("username") String username, @PathVariable(value = "id", defaultValue = "0") Long id) { // ... }
6.@RequestHeader
作用:用于获取请求消息头。
value:提供消息头名称
required:是否必须有此消息头
@RequestMapping("/useRequestHeader") public String useRequestHeader(@RequestHeader(value="Accept-Language", required=false)String requestHeader){ System.out.println(requestHeader); return "success"; }
7.@CookieValue
@CookieValue 是 Spring MVC 框架中的一个注解,用于将请求中指定名称的 Cookie 值绑定到处理请求的方法的参数上。
使用 @CookieValue 注解时,可以在处理请求的方法的参数前添加该注解,并指定要绑定的 Cookie 名称。Spring MVC 在接收到请求时,会自动从请求的 Cookie 中查找指定名称的 Cookie 值,并将其绑定到方法参数上。
示例代码如下:
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/info") public ResponseEntity<UserInfo> getUserInfo(@CookieValue("sessionToken") String sessionToken) { // 根据 sessionToken 获取用户信息 UserInfo userInfo = userService.getUserInfoBySessionToken(sessionToken); if (userInfo == null) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } return ResponseEntity.ok(userInfo); } }
在上面的示例中,@GetMapping(“/info”) 表示当收到一个 GET 请求,并且路径为 “/users/info” 时,将调用 getUserInfo() 方法来处理请求。通过 @CookieValue 注解标识的 sessionToken 参数,表示从请求的 Cookie 中获取名为 “sessionToken” 的值,并将其赋值给 sessionToken 参数。
通过这种方式,在处理请求的方法中可以直接使用请求的 Cookie 值,进行相应的操作和逻辑处理。
@CookieValue 注解还支持一些属性进行进一步的配置,例如设置是否为必需的、设置默认值等。
示例代码如下:
@GetMapping("/info") public ResponseEntity<UserInfo> getUserInfo( @CookieValue(value = "sessionToken", required = true) String sessionToken, @CookieValue(value = "theme", defaultValue = "light") String theme) { // ... }
在上面的示例中,@CookieValue(value = “sessionToken”, required = true) 表示获取名为 “sessionToken” 的 Cookie 值,并将其赋值给 sessionToken 参数。如果请求中没有提供该 Cookie,则会返回 400 Bad Request 错误;`@CookieValue(value = “theme”, defaultValue = "light
8.@RequestBody
@RequestBody 是 Spring MVC 框架中的一个注解,用于将请求体中的数据绑定到处理请求的方法的参数上。
使用 @RequestBody 注解时,可以在处理请求的方法的参数前添加该注解。
Spring MVC 在接收到请求时,会自动将请求体中的数据按照指定的数据类型转换,并将其绑定到方法参数上。
示例代码如下:
@RestController @RequestMapping("/users") public class UserController { @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { // 创建用户的逻辑 userService.createUser(user); return ResponseEntity.ok(user); } }
在上面的示例中,@PostMapping 表示当收到一个 POST 请求,并且路径为 “/users” 时,将调用 createUser() 方法来处理请求。方法参数中的 @RequestBody User user 表示从请求体中获取 JSON 格式的数据并转换为 User 对象,然后将其赋值给 user 参数。
通过这种方式,在处理请求的方法中可以直接使用请求体中的数据进行相应的操作和逻辑处理。
@RequestBody 注解还支持一些属性进行进一步的配置,例如设置请求体的媒体类型、是否必需等。
示例代码如下:
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<User> createUser(@RequestBody(required = true) User user) { // ... }
在上面的示例中,consumes = MediaType.APPLICATION_JSON_VALUE 表示只接受 JSON 格式的请求体;required = true 表示该参数是必需的,如果请求体中没有提供相应的数据,则会返回错误。
9.@ResponseBody
@ResponseBody 是 Spring MVC 框架中的一个注解,用于将处理请求的方法的返回值直接作为响应体的内容返回给客户端。
使用 @ResponseBody 注解时,可以在处理请求的方法上添加该注解。
Spring MVC 在调用方法后,会将方法的返回值转换为指定的数据格式(如 JSON、XML等),然后将其作为响应体返回给客户端。
@ResponseBody 是 Spring MVC 框架中的一个注解,用于将处理请求的方法的返回值直接作为响应体的内容返回给客户端。
示例代码如下:
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") @ResponseBody public User getUserById(@PathVariable("id") Long id) { // 根据用户ID查询用户 User user = userService.getUserById(id); return user; } }
上述示例中,@GetMapping(“/{id}”) 表示当收到一个 GET 请求,并且路径为 “/users/{id}” 时,将调用 getUserById() 方法来处理请求。方法的返回类型为 User 对象。
通过在方法上添加 @ResponseBody 注解,Spring MVC 将方法的返回值 User 对象转换为 JSON 格式,并将其作为响应体返回给客户端。
使用 @ResponseBody 注解还可以实现其他类型的数据格式转换,例如返回 XML 格式的数据。
示例代码如下:
@GetMapping("/{id}", produces = MediaType.APPLICATION_XML_VALUE) @ResponseBody public User getUserById(@PathVariable("id") Long id) { // ... }
在上面的示例中,通过设置 produces = MediaType.APPLICATION_XML_VALUE,表示返回 XML 格式的数据。
总之,@ResponseBody 注解用于将处理请求的方法的返回值直接作为响应体返回给客户端。可以通过该注解指定返回数据格式,如 JSON、XML等。
10.@SessionAttribute
@SessionAttribute 是 Spring MVC 框架中的一个注解,用于将模型属性(Model Attribute)存储到会话(Session)中,并在后续请求中可以直接访问和使用。
使用 @SessionAttribute 注解时,可以在处理请求的方法的参数或类级别上添加该注解。
当使用在方法参数上时,它将从会话中获取相应的属性值;
当使用在类级别上时,它将对整个类的所有处理请求的方法生效。
示例代码如下:
@Controller @RequestMapping("/cart") @SessionAttributes("cartItems") public class CartController { @ModelAttribute("cartItems") public List<Item> setupCartItems() { return new ArrayList<>(); // 初始化空的购物车项列表 } @GetMapping("/items") public String showCartItems(@ModelAttribute("cartItems") List<Item> cartItems) { // 显示购物车项 return "cart/items"; } @PostMapping("/items") public String addToCart(@ModelAttribute("cartItems") List<Item> cartItems, Item item) { // 将商品项加入购物车 cartItems.add(item); return "redirect:/cart/items"; // 重定向到展示购物车项的页面 } }
上述示例中,@SessionAttributes(“cartItems”) 注解表示将名为 “cartItems” 的模型属性存储到会话中,并在后续请求中可以共享和访问。
在类级别的 setupCartItems() 方法上使用 @ModelAttribute(“cartItems”) 注解,表示从会话中获取名为 “cartItems” 的属性值。如果会话中不存在该属性,则会调用 setupCartItems() 方法进行初始化,并将其添加到会话中。
在处理请求的方法中,通过 @ModelAttribute(“cartItems”) 注解从会话中获取购物车项列表,并进行相应的操作,例如显示购物车项、加入商品项等。
需要注意的是,当使用 @SessionAttribute 注解时,要确保在会话结束后及时清理会话属性,以避免可能的内存泄漏和数据一致性问题。
总之,@SessionAttribute 注解用于将模型属性存储到会话中,并在后续请求中可以直接访问和使用。通过在方法参数或类级别上添加该注解,可以轻松实现会话级别的属性共享。
11.@ControllerAdvice
@ControllerAdvice 是 Spring MVC 框架中的一个注解,用于定义全局控制器增强(Controller Advice)。它允许开发者在多个控制器中共享相同的行为或异常处理逻辑,并将这些通用逻辑集中到一个类中。
使用 @ControllerAdvice 注解时,需要创建一个带有 @ControllerAdvice 注解的类,并在该类中定义通用的控制器增强逻辑。这些逻辑可以包括以下方面:
异常处理:通过在方法上添加 @ExceptionHandler 注解定义通用的异常处理方法,处理特定类型的异常或一般性的异常。
数据绑定:通过在方法上添加 @InitBinder 注解自定义数据绑定逻辑,例如格式化日期、类型转换等。
模型属性:通过在方法上添加 @ModelAttribute 注解定义通用的模型属性方法,将模型属性添加到每个请求的模型中。
示例代码如下:
@ControllerAdvice public class GlobalControllerAdvice { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception ex) { // 处理并返回异常视图 ModelAndView modelAndView = new ModelAndView("error"); modelAndView.addObject("errorMessage", "Sorry, something went wrong."); return modelAndView; } @InitBinder public void initBinder(WebDataBinder binder) { // 自定义数据绑定逻辑 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); } @ModelAttribute public void addCommonAttributes(Model model) { // 添加通用的模型属性 model.addAttribute("appName", "MyApp"); } }
上述示例中,@ControllerAdvice 注解表示这个类是一个全局控制器增强类。
在 handleException() 方法上使用 @ExceptionHandler(Exception.class) 注解,当发生任何类型的异常时,都会调用该方法进行处理,并返回相应的错误视图。
通过 @InitBinder 注解定义了一个自定义数据绑定逻辑,并注册到默认的数据绑定器中。这里使用了一个 CustomDateEditor 将日期字符串转换为 Date 类型。
在 addCommonAttributes() 方法上使用 @ModelAttribute 注解,该方法会在每个请求之前被调用,并将指定的模型属性添加到每个请求的模型中。
12、@ModelAttribute
当使用 @ModelAttribute 注解时,可以在方法参数、方法返回值或方法上添加该注解。它的作用如下:
方法参数上的 @ModelAttribute 注解:
当用于处理请求的方法中的方法参数上时,它表示从模型中获取对应名称的属性,并将其绑定到被注解的方法参数上。如果模型中不存在对应名称的属性,则会创建一个新的对象,并绑定到方法参数上。
例如,在处理表单提交时,可以使用 @ModelAttribute 注解将表单数据绑定到方法参数上,以便进一步处理。
方法返回值上的 @ModelAttribute 注解:
当用于处理请求的方法中的方法返回值上时,它表示将方法返回的对象添加到模型中。默认情况下,以对象的类名首字母小写作为属性的名称,也可以通过指定 name 属性来自定义属性的名称。
方法上的 @ModelAttribute 注解:
当用于处理请求的方法上时,它表示该方法用于在处理请求之前向模型中添加属性。
例如,在每个请求之前需要将一些共享的属性添加到模型中时,可以在一个专门的方法上添加 @ModelAttribute 注解,然后该方法的返回值会自动添加到模型中。
@Controller @RequestMapping("/user") public class UserController { @GetMapping("/{id}") public String getUser(@PathVariable("id") int id, @ModelAttribute("user") User user) { // 根据用户ID查询用户信息,并将结果绑定到方法参数中的 User 对象上 return "user/profile"; } @PostMapping("/edit") public String updateUser(@ModelAttribute("user") User user) { // 更新用户信息 return "redirect:/user/" + user.getId(); } @ModelAttribute("user") public User setupUser() { // 在处理请求之前向模型中添加名为 "user" 的属性 return new User(); } }
上述示例中,@ModelAttribute(“user”) 注解用于将模型中的名为 “user” 的属性与方法参数或方法返回值进行绑定。
在 getUser() 方法中, 使用 @ModelAttribute(“user”) 注解将 User 对象与方法参数进行绑定。如果模型中存在名为 “user” 的属性,则会将其绑定到方法参数上;否则,会创建一个新的 User 对象并绑定到方法参数上。
在 updateUser() 方法中 ,使用 @ModelAttribute(“user”) 注解将方法返回的 User 对象添加到模型中。这样,在方法执行完毕后,模型中就会包含名为 “user” 的属性。
在 setupUser() 方法中, 使用 @ModelAttribute(“user”) 注解表示该方法用于在每个请求之前向模型中添加名为 “user” 的属性。根据需要可以从数据库或其他途径获取初始化数据,并返回一个新的 User 对象。
总之,@ModelAttribute 注解用于在 Spring MVC 框架中实现方法参数、方法返回值与模型属性的绑定。通过在方法参数、方法返回值或方法上添加该注解,可以方便地进行数据的传递和处理。