Java框架_SpringMVC_day03_注解开发

目录

四、SpringMVC 中的常用注解

4.1 @RequestParam注解:请求参数,用于指定参数名称

4.1.1 anno.jsp

4.1.2 AnnoController.java

4.2 @RequestBody注解:请求体,用于将json数据封装成java类

4.2.1 anno.jsp

4.2.2 Controller

4.3 @PathVariable注解:用于获取restful风格的请求参数

4.3.1 anno.jsp

4.3.2 Controller

4.4 REST风格URL

4.4.1 anno.jsp

4.4.2 Controller

4.5 @RequestHeader注解:获取请求头

4.5.1 anno.jsp

4.5.2 Controller

4.6 @CookieValue注解:获取Cookie的值

4.6.1 anno.jsp

4.6.2 Controller

4.7 @ModelAttribute注解:用于在跳转请求方法之前,封装实体

4.7.1 anno.jsp

4.7.2 Controller

4.8 @SessionAttributes注解:将请求数据存放到Sessioin

4.8.1 anno.jsp

4.8.2 Controller


四、SpringMVC 中的常用注解

  • @RequestParam注解:请求参数,用于指定参数名称
  • @RequestBody注解:请求体,用于将json数据封装成java类
  • @PathVariable注解:用于获取restful风格的请求参数
  • @RequestHeader注解:获取请求头
  • @CookieValue注解:获取Cookie的值
  • @ModelAttribute注解:用于在跳转请求方法之前,封装实体
  • @SessionAttributes注解:将请求数据存放到Sessioin

4.1 @RequestParam注解:请求参数,用于指定参数名称

作用:

​        把请求中指定名称的参数给控制器中的形参赋值。

属性:

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

4.1.1 anno.jsp

<h3>RequestParam入门案例@RequestParam</h3>

<a href="anno/testRequestParam?name=哈哈&age=22">name,age都有</a><br/>
<a href="anno/testRequestParam">无参数</a><br/>
<a href="anno/testRequestParam?name=嘻嘻">只有name,没有age</a><br/>

4.1.2 AnnoController.java

    @RequestMapping(value = "/testRequestParam")
    /**
     * value:请求参数中的名称。
     required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
     defaultValue:表示默认值,如果不传递值
     */
    public String testRequestParam(@RequestParam(value = "name",required = true) String username,@RequestParam(value = "age",defaultValue = "10") Integer age){
        System.out.println("执行了 AnnoController 类中的 testRequestParam ...  username:" + username + "    age:" + age);
        return "success";
    }

4.2 @RequestBody注解:请求体,用于将json数据封装成java类

作用:

  1. @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)(重点)
  2. 用于获取请求体内容。直接使用得到是key=value&key=value...结构的数据。 post请求没有问题,get请求方式不适用。

属性:

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

4.2.1 anno.jsp

<h3>@RequestBody</h3>
post请求jsp代码: <br>
<!-- request body注解 -->
<form action="anno/testRequestBody" method="post">
    用户名称:<input type="text" name="username" ><br/>
    用户密码:<input type="password" name="password" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>
get请求jsp代码: <br>
<a href="anno/testRequestBody?body=test">requestBody注解get请求</a>

4.2.2 Controller

    @RequestMapping(value = "/testRequestBody")
    /**
     required:是否必须有请求体。默认值是:true。
     当取值为true时,get请求方式会报错。
     如果取值为false,get请求得到是null。
     */
    public String testRequestBody(@RequestBody(required = false) String body){
        System.out.println("执行了 AnnoController 类中的 testRequestBody ...  body:" + body);
        return "success";
    }

4.3 @PathVariable注解:用于获取restful风格的请求参数

作用:

  1. ​ 用于绑定url中的占位符。例如:请求url中 /delete/{id}/{name},这个{id},{name}就是url占位符。
  2.  rest风格:/delete/3/zhangsan
  3. ​ url支持占位符是spring3.0之后加入的。是springmvc支持restful风格URL的一个重要标志。

属性:

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

4.3.1 anno.jsp

<h3>@PathVariable注解</h3>
<!-- PathVariable注解 -->
<a href="anno/testPathVariable/zhangsan/22">pathVariable注解</a>

4.3.2 Controller

    @RequestMapping(value = "/testPathVariable/{name}/{age}")
    public String testPathVariable(@PathVariable(value = "name") String username,@PathVariable(value = "age",required = false) Integer age){
        System.out.println("执行了 AnnoController 类中的 testPathVariable ...  username:" + username + "   age:" + age);
        return "success";
    }

4.4 REST风格URL

       REST(英文:Representational State Transfer,简称REST,说的意思是:表现层状态转变,或者叫做 “表述性状态转移”)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。

​        它本身并没有什么实用性,其核心价值在于如何设计出符合REST风格的网络接口。

RESTFUL的优点:

​ 它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

RESTFUL的特性:

​ 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。

​        它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。

表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层 (Representation)。

​ ​        比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。

​ 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。

​ ​        HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须 通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源

4.4.1 anno.jsp

<h1>resfful风格:jsp中示例代码:</h1>
<!-- 保存 -->
<form action="anno/testPathVariable" method="POST">
    用户名称:<input type="text" name="username"><br/>
    <input type="submit" value="保存"></form>
<hr/>
<!-- 更新 -->
<form action="anno/testPathVariable" method="PUT">
    用户名称:<input type="text" name="username"><br/>
    <input type="submit" value="更新">
</form>
<hr/>
<!-- 删除 -->
<form action="anno/testPathVariable/1" method="DELETE">
    <input type="submit" value="删除">
</form>
<hr/>
<!-- 查询一个 -->
<form action="anno/testPathVariable/1" method="GET">
    <input type="submit" value="查询">
</form>
<hr/>

4.4.2 Controller

    @RequestMapping(value = "/testPathVariable",method = RequestMethod.POST)
    public String save(User user){
        System.out.println("执行了 AnnoController 类中的 save ...  user:" + user);
        return "success";
    }

    @RequestMapping(value = "/testPathVariable",method = RequestMethod.PUT)
    public String update(User user){
        System.out.println("执行了 AnnoController 类中的 update ...  user:" + user);
        return "success";
    }

    @RequestMapping(value = "/testPathVariable/{id}",method = RequestMethod.DELETE)
    public String delete(@PathVariable(value = "id") Integer id){
        System.out.println("执行了 AnnoController 类中的 delete ...  id:" + id);
        return "success";
    }

    @RequestMapping(value = "/testPathVariable/{id}",method = RequestMethod.GET)
    public String find(@PathVariable(value = "id") Integer id){
        System.out.println("执行了 AnnoController 类中的 find ...  id:" + id);
        return "success";
    }

4.5 @RequestHeader注解:获取请求头

作用:

​        用于获取请求消息头。

属性:

​ ​        value:提供消息头名称

​ ​        required:是否必须有此消息头

4.5.1 anno.jsp

<h3>测试@RequestHeader注解</h3>
<!-- RequestHeader注解 -->
<a href="anno/testRequestHeader">获取请求消息头</a>

4.5.2 Controller

    @RequestMapping(value = "/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Accept") String requestHeader){
        System.out.println("执行了 AnnoController 类中的 testRequestHeader ...  requestHeader:" + requestHeader);
        return "success";
    }

4.6 @CookieValue注解:获取Cookie的值

作用:

​        用于把指定cookie名称的值传入控制器方法参数。

属性:

​        value:指定cookie的名称。

​        required:是否必须有此cookie。

4.6.1 anno.jsp

<h3>测试@CookieValue注解</h3>
<!-- CookieValue注解 -->
<a href="anno/testCookieValue">CookieValue注解</a>

4.6.2 Controller

    @RequestMapping(value = "/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
        System.out.println("执行了 AnnoController 类中的 testCookieValue ...  cookieValue:" + cookieValue);
        return "success";
    }

4.7 @ModelAttribute注解:用于在跳转请求方法之前,封装实体

作用:

​        该注解是SpringMVC4.3版本以后新加入的。它可以用于修饰方法和参数。

  • 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
  • 出现在参数上,获取指定的数据给参数赋值。

属性:

​        value:用于获取数据的key。key可以是POJO的属性名称,也可以是map结构的key。

应用场景:

​        当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

4.7.1 anno.jsp

<h3>测试@ModelAttribute注解</h3>
需求: 修改用户信息,要求用户的日期不能修改 jsp的代码:
<!-- 修改用户信息 -->
<form action="anno/testModelAttribute" method="post">
    用户名称:<input type="text" name="username" ><br/>
    用户年龄:<input type="text" name="age" ><br/>
    <input type="submit" value="保存">
</form>

4.7.2 Controller

    @ModelAttribute// 在执行的方法之前运行
    public void showModel(User user){
        user.setUsername("李四");
        user.setAge(22);
        user.setBirthday(new Date());
    }

    @RequestMapping(value = "/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("执行了 AnnoController 类中的 testModelAttribute ...  user:" + user);
        return "success";
    }

4.8 @SessionAttributes注解:将请求数据存放到Sessioin

作用:

​        用于多次执行控制器方法间的参数共享。 放置到类的上面。

属性:

​        value:用于指定存入的属性名称

​        type:用于指定存入的数据类型。

​        相当于将数据存放到Session中。

4.8.1 anno.jsp

<h3>测试@SessionAttributes注解</h3>
<!-- SessionAttribute注解的使用 -->
<a href="anno/sessionAttributePut">存入SessionAttribute</a> <hr/>
<a href="anno/sessionAttributeGet">取出SessionAttribute</a> <hr/>
<a href="anno/sessionAttributeClean">清除SessionAttribute</a>

4.8.2 Controller

@SessionAttributes(value = {"username","password"},types = {Integer.class})
public class AnnoController { 
    @RequestMapping(value = "/sessionAttributePut")
    public String sessionAttributePut(Model model){
        model.addAttribute("username","zhangsan");
        model.addAttribute("password",123);
        model.addAttribute("birthday",new Date());
        System.out.println("执行了 AnnoController 类中的 sessionAttributePut ...  model:" + model);
        return "success";
    }

    @RequestMapping(value = "/sessionAttributeGet")
    public String sessionAttributeGet(ModelMap model){
        System.out.println("执行了 AnnoController 类中的 sessionAttributeGet ...  model:" + model.get("username") + ", " + model.get("password") + ", " + model.get("birthday"));
        return "success";
    }

    @RequestMapping(value = "/sessionAttributeClean")
    public String sessionAttributeClean(SessionStatus sessionStatus){
        System.out.println("执行了 AnnoController 类中的 sessionAttributeClean ...  ");
        sessionStatus.setComplete();
        return "success";
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值