springMVC有哪些常用注解以及取参注解间的区别

一.springMVC有哪些注解,分别怎么使用?
1. @Controller
作用:用于标识一个类为 Spring MVC 的控制器。控制器用于处理客户端的请求并返回视图。
使用方式:
@Controller
public class MyController {
    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "helloView";
    }
}
该注解的类通常会有多个处理请求的方法。

2. @RequestMapping
作用:用于映射请求 URL 到处理方法上,支持 HTTP 请求方法(GET、POST、PUT、DELETE)以及请求参数的匹配。
使用方式:
@RequestMapping("/welcome")
public String welcome(Model model) {
    model.addAttribute("message", "Welcome to Spring MVC!");
    return "welcomeView";
}
可以使用 method 属性指定请求类型:
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(Model model) {
    // 保存逻辑
    return "successView";
}

3. @GetMapping,//查询 @PostMapping,//创建 @PutMapping,//更新 @DeleteMapping//删除
作用:这些注解是 @RequestMapping 的简化版本,分别用于处理 HTTP GET、POST、PUT、DELETE 请求。
使用方式:
@GetMapping("/getData")
public String getData(Model model) {
    model.addAttribute("data", "This is GET request data.");
    return "dataView";
}

@PostMapping("/submit")
public String submitForm(@RequestParam String name, Model model) {
    model.addAttribute("name", name);
    return "submitView";
}

4. @PathVariable
作用:用于绑定 URL 路径中的变量值到方法的参数上。
使用方式:
@RequestMapping("/user/{id}")
public String getUser(@PathVariable("id") Long id, Model model) {
    model.addAttribute("user", userService.getUserById(id));
    return "userView";
}
这里 {id} 是 URL 中的占位符,@PathVariable("id") 会将其值传递给 id 参数。

5. @RequestParam
作用:用于绑定请求参数到方法参数上。可以指定参数名称,也可以设置默认值。
使用方式:
@RequestMapping("/search")
public String search(@RequestParam("query") String query, Model model) {
    model.addAttribute("query", query);
    return "searchView";
}
使用默认值:
@RequestMapping("/greet")
public String greet(@RequestParam(defaultValue = "Guest") String name, Model model) {
    model.addAttribute("name", name);
    return "greetView";
}

6. @RequestBody
作用:用于将 HTTP 请求的主体(Body)内容绑定到方法参数上,通常用于处理 POST 请求的 JSON 或 XML 数据。
使用方式:
@PostMapping("/create")
public String createUser(@RequestBody User user) {
    userService.createUser(user);
    return "userCreated";
}

7. @ResponseBody
作用:用于将方法的返回值直接写入 HTTP 响应体中,通常与 @Controller 或 @RestController 一起使用。
使用方式:
@RequestMapping("/json")
@ResponseBody
public User getUser() {
    User user = new User("John", "Doe");
    return user;  // 返回 JSON 格式的数据
}

8. @RestController
作用:是 @Controller 和 @ResponseBody 的组合,适用于构建 RESTful 风格的 Web 服务。在类上加上 @RestController 注解时,类中的每个方法默认都会加上 @ResponseBody 注解,返回的对象会自动转为 JSON 或 XML 格式。
使用方式:
@RestController
public class UserController {
    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

9. @ModelAttribute
作用:用于绑定请求参数到方法的参数上,也可以用于在处理方法执行前将一些模型数据添加到模型中,常用于表单处理。
使用方式:
在方法参数上:
@RequestMapping("/userForm")
public String showForm(@ModelAttribute("user") User user) {
    return "userFormView";
}
在方法上:
@ModelAttribute("appConfig")
public AppConfig populateConfig() {
    return new AppConfig("App Name", "1.0");
}

10. @SessionAttributes
作用:用于将模型属性存储到 HTTP 会话中,可以在多个请求之间共享数据。
使用方式:
@Controller
@SessionAttributes("user")
public class UserController {
    @RequestMapping("/setUser")
    public String setUser(@ModelAttribute User user, Model model) {
        model.addAttribute("user", user);
        return "userSet";
    }

    @RequestMapping("/getUser")
    public String getUser(Model model) {
        User user = (User) model.asMap().get("user");
        return "userDetails";
    }
}


11. @ExceptionHandler
作用:用于定义在控制器方法中处理特定异常的逻辑。当指定异常被抛出时,Spring MVC 会调用对应的方法。
使用方式:
@Controller
public class MyController {
    @ExceptionHandler(Exception.class)
    public String handleException(Exception ex, Model model) {
        model.addAttribute("error", ex.getMessage());
        return "errorView";
    }
}

二.取参注解间的区别
@RequestParam、@ModelAttribute 和 @RequestBody 都是 Spring Web 框架中的常用注解,用于处理HTTP请求中的参数和请求体。但它们的功能和使用场景有所不同。下面详细解释它们的区别:

1. @RequestParam
作用:用于绑定 HTTP 请求中的查询参数(通常是 URL 中的查询字符串)到方法参数上。

适用场景:主要用于处理 GET 请求中的 URL 查询参数,或表单提交的数据。

工作原理:将请求参数的值与方法参数进行匹配,默认按名称匹配。如果请求参数没有提供,可以通过设置默认值来避免空值错误。

使用方式:
@GetMapping("/search")
public String search(@RequestParam("query") String query) {
    return "Searching for: " + query;
}
URL 示例:

/search?query=Spring
结果:query 参数的值将被绑定到方法的 query 参数上。

常见特点:

适用于查询参数(即 URL 中的?key=value对)。
支持多个参数,如 @RequestParam("param1") String param1, @RequestParam("param2") String param2。
可以通过设置 required=false 使参数为可选(默认 required=true)。
示例:
@GetMapping("/search")
public String search(@RequestParam(name = "query", required = false, defaultValue = "Spring") String query) {
    return "Searching for: " + query;
}


2. @ModelAttribute
作用:用于将请求参数绑定到一个 Java 对象上,通常用于表单提交或复杂参数对象的绑定。

适用场景:主要用于 POST 或 PUT 请求的请求体中参数的绑定,尤其是当参数是一个复杂的 Java 对象时。

工作原理:Spring 会根据请求的参数名称自动将它们映射到方法中的 @ModelAttribute 注解的对象属性上。如果请求参数名称和对象属性名称匹配,Spring 会自动赋值。

使用方式:
@PostMapping("/user")
public String saveUser(@ModelAttribute User user) {
    userService.save(user);
    return "userSaved";
}
表单示例:

html
<form action="/user" method="POST">
    <input type="text" name="name" />
    <input type="text" name="email" />
    <button type="submit">Submit</button>
</form>
请求体:

name=John&email=john@example.com
常见特点:

支持将表单数据或查询参数绑定到一个对象上。
适用于复杂类型的绑定,如一个表单中的多个字段。
可以在控制器方法的参数上使用,或用于预处理方法中添加属性到模型。
示例:
@ModelAttribute
public void addCommonAttributes(Model model) {
    model.addAttribute("platform", "Spring");
}
这段代码会在每个请求前将 "platform" 属性添加到模型中,供视图使用。

3. @RequestBody
作用:用于绑定 HTTP 请求的 主体内容(请求体)到方法参数上,常用于处理 POST、PUT 请求中的 JSON 或 XML 数据。

适用场景:主要用于处理客户端发送的 JSON、XML 等格式的数据(请求体),并将其转换为 Java 对象。

工作原理:Spring 会使用 HttpMessageConverter 将请求体(通常是 JSON 或 XML)转换为 Java 对象,绑定到方法参数上。

使用方式:
@PostMapping("/user")
public String addUser(@RequestBody User user) {
    userService.save(user);
    return "userAdded";
}
请求体:

json
{
  "name": "John",
  "email": "john@example.com"
}
常见特点:

适用于处理 JSON、XML 等格式的请求体。
客户端请求通常是 POST 或 PUT,数据在请求体中发送。
默认情况下,Spring 会自动将 JSON(或其他支持的格式)转换为 Java 对象。
示例:
@PostMapping("/update")
public ResponseEntity<User> updateUser(@RequestBody User user) {
    User updatedUser = userService.update(user);
    return ResponseEntity.ok(updatedUser);
}
总结:

注解作用适用场景绑定数据来源
@RequestParam绑定 URL 查询参数简单的查询参数(如 GET 请求中的查询字符串)请求的查询参数(?key=value
@ModelAttribute绑定表单或 URL 查询参数到 Java 对象表单提交或复杂对象的参数绑定表单参数或查询参数
@RequestBody绑定请求体(JSON、XML等格式)到 Java 对象POSTPUT 请求的 JSON 或其他格式数据请求体中的数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值