SpringMVC 常用注解

1.RequestParam注解

  1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
  2. 属性1. value:请求参数中的名称 2. required:请求参数中是否必须提供此参数,默认值是true,必须提供
    参数名字要和注解的值相同pname
<a href="anno/testRequestParam?pname=xxx">testRequestParam</a>
@Controller
@RequestMapping("/anno")
public class AnnotationController {

    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("pname") String name){
        System.out.println(name);
        return "success";
    }
}

2.RequestBody注解

注意:这个注释 参数个数没对上出现415错误

  1. 作用:用于获取请求体的内容(注意:get方法不可以,get没有请求体)
    name=xx&age=18
<form action="anno/testRequestBody" method="post">
        uname;<input type="text" name="name"><br>
        age;<input type="text" name="age"><br>
        <input type="submit" value="submit">
    </form>
@RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }

3.PathVariable注解

  1. 作用:拥有绑定url中的占位符的。例如:url中有/anno/{id},{id}就是占位符
  2. 属性1. value:指定url中的占位符名称
    不用id=1
<a href="anno/testPathVariable/1">testPathVariable</a><br>
@RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") String id){
        System.out.println(id);
        return "success";
    }

4.RequestHeader

  1. 作用:获取指定请求头的值
  2. 属性1. value:请求头的key

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36

<a href="anno/testRequestHeader">testRequestHeader</a><br>
@RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader("User-Agent") String header){
        System.out.println(header);
        return "success";
    }

5.CookieValue注解

  1. 作用:用于获取指定cookie的key的值
  2. 属性1. value:cookie的key
<a href="anno/testCookieValue">testCookieValue</a><br>
@RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String cookie){
        System.out.println(cookie);
        return "success";
    }

6.ModelAttribute注解

  1. 作用1. 出现在方法上:表示当前方法会在控制器方法执行前执行。2. 出现在参数上:获取指定的数据给参数赋值。
  2. 应用场景1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
<form action="anno/testModelAttribute" method="post">
        uname;<input type="text" name="name"><br>
        age;<input type="text" name="age"><br>
        <input type="submit" value="submit">
    </form>

demo01
first
null

@RequestMapping("/testModelAttribute")
    public String testModelAttribute( String cookie){
        System.out.println(cookie);
        return "success";
    }
    @ModelAttribute
    public void first(){
        System.out.println("first");
    }

demo02和demo03需要

public class Person {
    private String name;
    private Integer age;
    private String address;

    public Person() {
    }

    public Person(String name, Integer age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

demo02
修饰的方法有返回值
Person{name=‘张三’, age=18, address=‘羊村’}

@RequestMapping("/testModelAttribute")
    public String testModelAttribute(Person person){
        System.out.println(person);
        return "success";
    }
    @ModelAttribute
    public Person first(String name,String age){
        Person person = new Person();
        person.setName(name);
        person.setAge(Integer.valueOf(age));
        person.setAddress("羊村");
        return person;
    }

demo03
修饰的方法无返回值
效果同demo02

@RequestMapping("/testModelAttribute")
    public String testModelAttribute(@ModelAttribute("temp") Person person){
        System.out.println(person);
        return "success";
    }
    @ModelAttribute
    public void first(String name, String age, Map<String, Person> map){
        Person person = new Person();
        person.setName(name);
        person.setAge(Integer.valueOf(age));
        person.setAddress("羊村");
        map.put("temp",person);
    }

7.SessionAttributes注解

1.requestScope

success.jsp

<body>
    <h3>成功跳转</h3>
    ${requestScope.username}
    ${requestScope.password}
    ${requestScope.age}
</body>

index.jsp

<a href="anno/save">save</a><br>
    <a href="anno/find">find</a><br>
    <a href="anno/delete">delete</a><br>
@RequestMapping(path = "/save")
    public String save(Model model) {
        System.out.println("向request域中保存数据");
        model.addAttribute("username", "xxx");
        model.addAttribute("password", "123");
        model.addAttribute("age", 18);
        return "success";
    }

success.jsp效果
在这里插入图片描述

2.sessionScope

加入如下即可
注意此时save方法将在requestScope和sessionScope同时存储


@SessionAttributes({"username","password","age"})
public class AnnotationController {

如需查找或修改

/**
     * 从session中获取值 *
     * @return
     */
    @RequestMapping(path = "/find")
    public String find(ModelMap modelMap) {
        String username = (String) modelMap.get("username");
        String password = (String) modelMap.get("password");
        Integer age = (Integer) modelMap.get("age");
        System.out.println(username + " : " + password + " : " + age);
        return "success";
    }

    /**
     * 清除值 * 需要执行两次
     * 第一次删除requestScope
     * 第二次删除sessionScope
     * @return
     */
    @RequestMapping(path = "/delete")
    public String delete(SessionStatus status) {
    	// 清除当前处理器通过@SessionAttribute注册的session属性
        status.setComplete();
        return "success";
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值