SpringMVC常用注解详解


前言

SpringMVC处理响应

一、Controller注解的使用

@Contorller标记该类是一个控制器,将控制器交给Spring容器管理 位置:类上方

代码如下:
代码如下(示例):

package com.itbaizhan.Controller;

import org.springframework.stereotype.Controller;
//声明该类是一个控制类并交给Spring容器管理
@Controller
public class MyController8 {
}

二、RequestMapping注解的使用

**@RequestMapping注解的作用:给控制器方法设置请求路径
	位置:类上方、方法上方
	属性:value/path(请求路径)
		method{}(请求方式)
		headers{}(必须要包含的请求头)	**
  • 位置在类上方和方法上方的区别:

    • 如果该注解放在类上方那么该类下的所有控制器方法都是以该地址作为父路径

代码如下:
**下述代码的请求路径为:/c/annotation?username=username

  • 参数必须带有username
  • 请求方式既可以是Get请求也可以是Post请求
  • 获取User-agent的请求头信息

**

package com.itbaizhan.Controller;

import org.springframework.stereotype.Controller;
@Controller
@RequestMapping("/c")
public class MyController3 {

    @RequestMapping(value = "/annotation",params = "username",
    method = {RequestMethod.GET,RequestMethod.POST},
    headers = {"User-agent"})
    public String method(String username){
        System.out.println(username);
        return "baizhan";
    }

三、RequestParam注解的使用

在控制器方法中获取请求参数当请求参数与控制器方法的参数不同时将不会完成自动封装,这是需要加上@RequestParam指定请求行参数等属性
位置:方法参数前

  • 该注解的属性:

    • name(请求行的参数名)
    • defaultValue(默认值)
    • required(该参数是否为必填项)

代码如下:

 @RequestMapping(path = "/annotation2")
    public String getParam(@RequestParam(name = "username",defaultValue = "itbz",required = true) String name){
        System.out.println(name);
        return "baizhan";
    }

四、RequestHeader注解和@CookieValue注解的使用

  • @RequestHeader注解
    • 作用:获取请求头的信息封装到对象中
    • 位置:方法参数前
  • CookieValue注解
    • 作用:获取 cookie数据(jSessionId)并将值封装到对象中
    • 位置:方法参数前

代码如下:

@RequestMapping("/annotation3")
    public String annot(@RequestHeader("User-Agent") String userAgent, @CookieValue("JSESSIONID") String jSessionId) {
        System.out.println(userAgent);
        System.out.println(jSessionId);
        return "baizhan";
    }

五:SessionAttributes注解的使用

  • 作用:将Model模型中的数据添加到session域中
  • 位置:类上方

代码如下:

@Controller
@SessionAttributes("name")
public class MyController4 {

    @RequestMapping("/t1")
    public String t1(Model model){
        model.addAttribute("name","百战程序员");
        return "baizhan";
    }
    @RequestMapping("/t2")
    public String t2(HttpSession httpSession){
        System.out.println(httpSession.getAttribute("name"));
        return "baizhan";
    }
}

六、ModelAttribute注解的使用

  • 作用1:@ModelAttribute指定的方法比控制器方法先执行
  • 作用2:从Model模型中获取数据给参数赋值

代码如下:

package com.itbaizhan.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/c2")
public class MyController5 {
    //使用ModelAttribute注解向model模型中添加数据
    @ModelAttribute
    public void before(Model model){
        model.addAttribute("name","尚学堂");
    }
    @RequestMapping("/t1")
    public String ttt(@ModelAttribute("name") String name){
        System.out.println(name);
        return "baizhan";
    }
}

七、RESTful风格简介

  • GET请求:查询操作
  • POST请求:新增操作
  • DELETE请求:删除操作
  • PUT请求:修改操作

八、PathVariable注解的使用

  • 作用:获取RESTful中URL占位符的值并封装到方法参数中
  • 位置:方法参数前

代码如下:

@DeleteMapping("/{id}")
    public String deleteFindById(@PathVariable int id){
        System.out.println("删除id为"+id+"的学生");
        return "baizhan";
    }

九、请求过滤器

org.springframework.web.filterHettenHttpMethodFilter
注意:只能过滤POST请求

代码如下:

<filter>
    <filter-name>httpFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>httpFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 在jsp页面中的配置:
<%--
  Created by IntelliJ IDEA.
  User: matebook4s
  Date: 2022/12/13
  Time: 23:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Delete、Put</title>
</head>
<body>
<!--  删除方法  -->
    <form action="/c7/cc" method="post">
        <input type="hidden" name="_method" value="DELETE"><!--  隐藏域  -->
        <input type="submit" value="删除">
    </form>
    <!--  修改方法  -->
<form action="/c7/ccc" method="post">
    <input type="hidden" name="_method" value="PUT">
    <input type="submit" value="修改">
</form>
</body>
</html>

十、ResponseBody注解的使用

  • 将方法的返回值转换为JSON格式,并将JSON数据直接写入到输出流当中,使用此注解后不再经过视图解析器,使用该注解就可处理Ajax(异步请求)请求

代码如下:
使用该注解时需要引入的依赖:
1.jackson-core
2.jackson-databind
3.jackson-annotations

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

对静态资源进行放行处理
放行静态资源:

<mvc:default-servlet-headler></mvc:default-servlet-headler>

配置默认servlet处理静态资源

<servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.img</url-pattern>
</servlet-mapping>

jsp页面


<%--
  Created by IntelliJ IDEA.
  User: matebook4s
  Date: 2022/12/14
  Time: 20:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Ajax</title>
    <!--  引入Jquery  -->
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                var name=$("#name").val();//val是他的值
                var sex=$("#sex").val();
                $.get("/c8/addStudent",{"name":name,"sex":sex},function (data){
                    console.log(data);
                })
            })
        })
    </script>
</head>
<body>
姓名:    <input id="name"/><br/>
性别:    <input id="sex"/><br/>
        <input type="button" value="提交" id="btn">
</body>
</html>

控制器

@GetMapping("/addStudent")
@ResponseBody
    public Result addStudent(String name, String sex){
        System.out.println(name+":"+sex);
        return new Result(true,"添加用户成功");
    }

结果集方法

package com.itbaizhan.domain;

//结果集
public class Result {
    private boolean flag;
    private String message;

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public String toString() {
        return "Result{" +
                "flag=" + flag +
                ", message='" + message + '\'' +
                '}';
    }

    public Result(boolean flag, String message) {
        this.flag = flag;
        this.message = message;
    }

    public Result() {
    }
}

十一、RestController注解的使用

  • 作用:可以让一个类下的所有方法的返回值都转换为JSON格式(都不经过视图解析器)
  • 位置:类上方

代码如下:

@RestController
public class MyController {
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了SpringMVC注解的使用,SpringMVC注解会大大提高我们写代码的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿晓晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值