SpringMVC中的常用注解

本文详细解析了SpringMVC框架中常用的四个注解:@RequestParam、@RequestBody、@PathVariable和@ModelAttribute的功能与用法。通过实例展示了如何在控制器中使用这些注解处理请求参数,包括请求体、URL占位符及模型属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC中的@RequestParam

  • 作用:把请求中指定名称的参数给控制器中的形参赋值。

  • 属性:

    • value:请求中的参数名称。
    • required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如不提供则报错。

示例

/**
 * 常用注解
 */
@Controller
@RequestMapping("/anno")
public class AnnoController {

    @RequestMapping("testRequestParam")
    public String testRequestParam(@RequestParam("uname") String userName){
        System.out.println("执行了.....");
        System.out.println(userName);
        return "success";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--常用注解--%>
    <a href="anno/testRequestParam?uname=哈哈哈">RequestParam</a>

</body>
</html>

SpringMVC中的@RequestBody

  • 作用:用于获取请求体内容。直接使用得到是key=value&key=value…结构的数据。

  • get方法不适用。

  • 属性:

    • required:是否必须有请求体。默认值是true。当取值为true时,get请求方式会报错。如果请求为false,get请求得到的是null。

示例

@RequestMapping(value = "testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println("执行了.....");
        System.out.println(body);
        return "success";
    }
<form action="anno/testRequestBody" method="post">
            姓名:<input type="text" name="userName"/><br/>
            年龄:<input type="text" name="age"/><br/>
            <input type="submit" value="提交"/><br/>
        </form>

SpringMVC中的@PathVariable

  • 作用:用于绑定url中的占位符。例如,请求url中/delete/{id},这个{id}就是url占位符。url支持占位符是spring 3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。

  • 属性:

    • value:用于指定url中占位符名称。
    • required:是否必须提供占位符。

示例

@RequestMapping(value = "/testPathVariable/{sid}")
    public String testPathVariable(@PathVariable(name = "sid") String id){
        System.out.println("执行了.....");
        System.out.println(id);
        return "success";
    }
<a href="anno/testPathVariable/10">PathVariable</a>

SpringMVC中的@ModelAttribute

  • 作用:该注解是SpringMVC4.3版本以后新加入的。它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。

  • 属性:

    • value:用于获取数据中的key。key可以是pojo的属性名称,也可以是map结构的key。
  • 应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
    例如:
    我们在编辑一个用户时,用户有一个创建信息字段,该字段的值时不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把此字段内容置为null,此时就可以使用此注解解决问题。

<form action="anno/testModelAttribute" method="post">
        姓名:<input type="text" name="uname"/><br/>
        年龄:<input type="text" name="age"/><br/>
        <input type="submit" value="提交"/><br/>
    </form>

示例1

@RequestMapping(value = "/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("testModelAttribute执行了.....");
        System.out.println(user);
        return "success";
    }
    @ModelAttribute//该方法会先执行
    public User showUser(String uname){
        System.out.println("showUser执行了");
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());
        return user;
    }

示例2

@RequestMapping(value = "/testModelAttribute")
    public String testModelAttribute(@ModelAttribute(name = "aaa") User user){
        System.out.println("testModelAttribute执行了.....");
        System.out.println(user);
        return "success";
    }
    @ModelAttribute//该方法会先执行
    public void showUser(String uname, Map<String,User> map){
        System.out.println("showUser执行了");
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());
        map.put("aaa",user);
    }

SpringMVC中的@SessionAttribute

  • 作用:用于多次执行控制方法间的参数共享。

  • 属性:

    • value:用于指定存入的属性名称。
    • type:用于指定存入的数据类型。

示例:

<a href="anno/testSessionAttributes">SessionAttribute</a>
    <a href="anno/getSessionAttributes">getSessionAttribute</a>
    <a href="anno/delSessionAttributes">delSessionAttribute</a>

在类上加:

@SessionAttributes(value = {"msg"})//把msg=口罩存入到session作用域里
@RequestMapping(value = "/testSessionAttributes")
    public String testSessionAttributes(Model model){
        System.out.println("testSessionAttributes执行了.....");
        //底层会存储到request对象
        model.addAttribute("msg","口罩");
        return "success";
    }
    //得到session里的值
    @RequestMapping(value = "/getSessionAttributes")
    public String getSessionAttributes(Model model){
        System.out.println("getSessionAttributes执行了.....");
        String msg = (String)model.getAttribute("msg");
        System.out.println(msg);
        return "success";
    }
    //清除
    @RequestMapping(value = "/delSessionAttributes")
    public String delSessionAttributes(SessionStatus sessionStatus){
        System.out.println("delSessionAttributes执行了.....");
        sessionStatus.setComplete();//删除
        return "success";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值