热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:SpringMVC从入门到精通系列03——常用注解

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringMVC从入门到精通系列03——常用注解相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringMVC 从入门到精通系列 03——常用注解相关的知识,希望对你有一定的参考价值。








文章目录


    • 1. RequestParam 注解
    • 2. RequestBody 注解
    • 3. PathVariable 注解
    • 4. RequestHeader 注解(了解)
    • 5. COOKIEValue 注解(了解)
    • 6. ModelAttribute 注解
    • 7. SessionAttributes 注解






1. RequestParam 注解


  1. 作用: 把请求中的指定名称的参数传递给控制器中的形参赋值

  2. 属性:


    1. value: 请求参数中的名称
    2. required: 请求参数中是否必须提供此参数,默认值是true,必须提供(如果不提供会报错)
    3. 代码如下:

    jsp:

    <a href&#61;"anno/testRequestParam?username&#61;xiuyan">测试RequestParama>

    Controller&#xff1a;

    &#64;Controller
    &#64;RequestMapping(path &#61; "/anno")
    public class AnnoController {
    &#64;RequestMapping(path &#61; "/testRequestParam")
    public String testRequestParam(&#64;RequestParam(value &#61; "username") String name){
    System.out.println("测试RequestParam注解");
    System.out.println(name);
    return "success";
    }
    }

    测试结果&#xff1a;
    在这里插入图片描述




2. RequestBody 注解


  1. 作用&#xff1a;用于获取请求体的内容&#xff08;注意&#xff1a;get方法不可以&#xff09;

  2. 属性&#xff1a;


    1. required&#xff1a;是否必须有请求体&#xff0c;默认值是true
  3. 代码如下&#xff1a;

    jsp&#xff1a;

    <form action&#61;"anno/testRequestBody" method&#61;"post">
    姓名&#xff1a;<input type&#61;"text" name&#61;"uname"><br>
    年龄&#xff1a;<input type&#61;"text" name&#61;"age"><br>
    <input type&#61;"submit" value&#61;"提交" />
    form>

    Controller&#xff1a;

    &#64;Controller
    &#64;RequestMapping(path &#61; "/anno")
    public class AnnoController {
    &#64;RequestMapping(path &#61; "/testRequestBody")
    public String testRequestBody(&#64;RequestBody String body){
    System.out.println("测试RequestBody注解");
    System.out.println(body);
    return "success";
    }
    }

    测试结果&#xff1a;
    在这里插入图片描述
    在这里插入图片描述




3. PathVariable 注解


  1. 作用&#xff1a;拥有绑定url中的占位符的。 例如&#xff1a;url中有/delete/{id}&#xff0c;{id}就是占位符
  2. 属性&#xff1a;
    1. value&#xff1a;指定url中的占位符名称
  3. Restful 风格的 URL&#xff1a;
    1. 请求路径一样&#xff0c;可以根据不同的请求方式去执行后台的不同方法
    2. restful风格的URL优点
      1. 结构清晰
      2. 符合标准
      3. 易于理解
      4. 扩展方便
  4. 代码如下&#xff1a;

jsp&#xff1a;

<a href&#61;"anno/testPathVariable/111">测试PathVariablea>

Controller&#xff1a;

&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
public class AnnoController {
&#64;RequestMapping(path &#61; "/testPathVariable/{sid}")
public String testPathVariable(&#64;PathVariable(name&#61;"sid") String id){
System.out.println("测试PathVariable注解");
System.out.println(id);
return "success";
}
}

在这里插入图片描述




4. RequestHeader 注解&#xff08;了解&#xff09;


  1. 作用&#xff1a;获取指定请求头的值

  2. 属性&#xff1a;


    1. value&#xff1a;请求头的名称
  3. 代码如下

    &#64;RequestMapping(path&#61;"/hello")
    public String sayHello(&#64;RequestHeader(value&#61;"Accept") String header) {
    System.out.println(header);
    return "success";
    }




5. COOKIEValue 注解&#xff08;了解&#xff09;


  1. 作用&#xff1a;用于获取指定COOKIE的名称的值

  2. 属性&#xff1a;


    1. value&#xff1a;COOKIE的名称
  3. 代码&#xff1a;

    &#64;RequestMapping(path&#61;"/hello")
    public String sayHello(&#64;COOKIEValue(value&#61;"JSESSIONID") String COOKIEValue) {
    System.out.println(COOKIEValue);
    return "success";
    }




6. ModelAttribute 注解


  1. 作用&#xff1a;
    1. 出现在方法上&#xff1a;表示当前方法会在控制器方法执行前先执行。
    2. 出现在参数上&#xff1a;获取指定的数据给参数赋值。
  2. 应用场景&#xff1a;
    1. 当提交表单数据不是完整的实体数据时&#xff0c;保证没有提交的字段使用数据库原来的数据。
  3. 具体的代码&#xff1a;

有返回值&#xff1a;

jsp&#xff1a;

<form action&#61;"anno/testModuleAttribute" method&#61;"post">
姓名&#xff1a;<input type&#61;"text" name&#61;"username"><br>
年龄&#xff1a;<input type&#61;"text" name&#61;"age"><br>
<input type&#61;"submit" value&#61;"提交" />
form>

Controller&#xff1a;

&#64;RequestMapping(path&#61;"/testModuleAttribute")
public String testModuleAttribute( User user){
System.out.println("showUser方法执行了");
System.out.println(user);
return "success";
}
/**
* 该方法会先执行&#xff08;有返回值&#xff09;
*/

&#64;ModelAttribute
public User showUser(String username){
System.out.println("测试ModuleAttribute注解");
User user &#61; new User();
user.setUsername("xiuyan");
user.setAge(22);
user.setDate(new Date());
return user;
}

测试结果&#xff1a;
在这里插入图片描述
在这里插入图片描述

  结果显示&#xff0c;由于先执行 showUser 方法&#xff0c;在方法里面封装了 User 对象并返回&#xff0c;从而再执行 testModuleAttribute 方法时&#xff0c;不会因为传入表单没有传入日期属性&#xff0c;而导致日期属性为空。



无返回值&#xff1a;

&#64;RequestMapping(path&#61;"/testModuleAttribute")
public String testModuleAttribute(&#64;ModelAttribute("abc") User user){
System.out.println("showUser方法执行了");
System.out.println(user);
return "success";
}
/**
* 无返回值
*/

&#64;ModelAttribute
public void showUser(String username, Map<String, User> map){
System.out.println("测试ModuleAttribute注解");
User user &#61; new User();
user.setUsername("xiuyan");
user.setAge(22);
user.setDate(new Date());
map.put("abc", user);
}

测试结果&#xff1a;
在这里插入图片描述
在这里插入图片描述




7. SessionAttributes 注解


  1. 作用&#xff1a;用于多次执行控制器方法间的参数共享
  2. 属性&#xff1a;
    1. value&#xff1a;指定存入属性的名称
  3. 代码如下&#xff1a;

jsp&#xff1a;

<a href&#61;"anno/testSessionAttributes">测试SessionAttributesa><br>
<a href&#61;"anno/getSessionAttributes">测试getSessionAttributesa><br>
<a href&#61;"anno/delSessionAttributes">测试delSessionAttributesa><br>

&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
&#64;SessionAttributes(value &#61; {"msg"})
public class AnnoController {
&#64;RequestMapping(path&#61;"/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("testSessionAttributes方法执行了");
//默认会将 msg 存入 request 域&#xff0c;当开启&#64;SessionAttributes(value &#61; {"msg"})&#xff0c;也会将 msg 存入 session
model.addAttribute("msg", "haha");
return "success";
}
&#64;RequestMapping(path&#61;"/getSessionAttributes")
public String getSessionAttributes(ModelMap model){
System.out.println("getSessionAttributes方法执行了");
String msg &#61; (String) model.get("msg");
System.out.println(msg);
return "success";
}
&#64;RequestMapping(path&#61;"/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
System.out.println("delSessionAttributes方法执行了");
status.setComplete();
return "success";
}
}

成功页面&#xff1a;

<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" isELIgnored&#61;"false" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<h3>成功页面h3>
${requestScope.msg}
${sessionScope.msg}
body>
html>

在这里插入图片描述






推荐阅读
author-avatar
mobiledu2502859507
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有