SpringMVC——初识2(boot+注解)

在这里插入图片描述

一、配置

采取基于SpirngBoot的方式配置。
在这里插入图片描述

1)新建maven项目
2)导入坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 默认使用的Spring Framework版本为5.2.10.RELEASE -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>springboot-study</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!-- spring-boot-starter-web: 基于SpringBoot开发的依赖包,
                                 会再次依赖spring-framework中基本依赖包,aop相关依赖包,web相关依赖包,
                                 还会引入其他如json,tomcat,validation等依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 排除tomcat依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 添加 Undertow 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

        <!--引入AOP依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <!-- spring-boot-devtools: SpringBoot的热部署依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <!-- 不能被其它模块继承,如果多个子模块可以去掉 -->
            <optional>true</optional>
        </dependency>

        <!-- lombok: 简化bean代码的框架 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- spring-boot-starter-test: SpringBoot测试框架 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- SpringBoot的maven打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 明确指定一些插件的版本,以免受到 maven 版本的影响 -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.3</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>

        </plugins>
    </build>

</project>
3)在resources目录下新建static和public、templates文件夹
4)在resources目录下新建application.properties文件,并做相应配置
debug=true
# 设置打印日志的级别,及打印sql语句
#日志级别:trace,debug,info,warn,error
#基本日志
logging.level.root=info
#扫描的包:druid.sql.Statement类和frank包
logging.level.druid.sql.Statement=debug
logging.level.org.example=debug
logging.level.org.springframework=debug

# 美化JSON数据格式
spring.jackson.serialization.indent-output=true
# 设置JSON数据的日期格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
# JSON数据属性为null时不返回
spring.jackson.default-property-inclusion=non_null
# get请求参数及表单提交数据的日期格式
spring.mvc.format.date=yyyy-MM-dd HH:mm:ss
5) 在包下新建Application类,并添加@SpringBootApplication注解作为WEB的入口

二. 注解

0. @SpringBootApplication
该注解添加在Application类中,该类必须在一个包下,表示该包下的都可以被扫描到,添加在容器中。
在这里插入图片描述

  1. @Controller
    标记在一个类或方法上,注册了一个Web请求的实例,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。@Controller 只是定义了一个控制器类。

  2. @RequestMapping
    用于类或方法上,RequestMapping是一个用来处理请求地址映射的注解,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。他也可以用来定义获取该服务的请求方法类型。
    在这里插入图片描述

  3. @RequestParam
    用在方法形参上,如果不写则默认添加该注解,@RequestParam主要用于在SpringMVC后台控制层获取参数,但只能获取数据ContentType为 form表单 和 form-data形式的。使用方式如下:
    在这里插入图片描述

  4. @RequestBody
    用在方法的形参上,表示传到后端的请求数据格式是application/json格式。
    在这里插入图片描述

  5. @PathVariable
    形参中使用,获取请求路径中的变量。
    在这里插入图片描述

  6. @ResponseBody
    用在方法上,该注解用于将Controller的方法返回的对象,返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)。换言之,只要方法向前端返回的数据是json对象格式,需要加上这个注解。
    在这里插入图片描述

  7. @RestController
    类上使用,和@Controller注解功能完全一样,只不过类中所有方法的返回值都是默认返回视图的,也就是默认所有方法都加上了@ResponseBody。

  8. @Configuration
    1) 类中使用,为控制器定义一个配置类。
    2) 在该类中添加一个@Bean的方法,会在启动时为容器添加一个组件
    3) 该类若实现 WebMvcConfigurer接口,可以重写addInterceptors()方法,为Controller添加拦截器,然后设置拦截器匹配路径,并自定义处理的方式(处理类)。当Controller接受客户端请求,匹配到路径时,进行拦截,处理方式遵循自定义的处理类。
    自定义的拦截处理类需要实现HandlerInterceptor接口,并重写preHandle、postHandle、afterCompletion方法。
    其中,preHandle表示接受客户端请求,Controller方法执行前进行的处理(返回true说明通过了校验,如果返回false说明未通过检验);postHandle表示,Controller方法执行完之后的处理。
    下面代码简单的实现功能:用户未登录时(没有session)访问敏感路径(如/login1,/login2,/login3)会返回到登录界面(login.html)并返回false,若登陆了可以访问敏感路径。
    在这里插入图片描述
    在这里插入图片描述

  9. @ControllerAdvice(了解)
    1)类中使用,是一个增强的 Controller,可以拦截Controller中的请求方法。
    2)若该类实现了ResponseBodyAdvice接口,并重写了supports方法 与beforeBodyWrite方法。那么就可以对Controller返回的数据进行统一的包装再发送至前端。(这里里的包装,参考博客系统项目包装的ResponseJson类)
    supports方法返回True表示请求体返回数据时先执行beforeBodyWrite方法,若返回False不执行。在beforeBodyWrite方法中对数据进行包装。一般来说包装的类型是自己写的类。比如下图中的Response,这个类就是自定义的。
    在这里插入图片描述

  10. @ExceptionHandler(Exception.class)(了解)
    在 @ControllerAdvice 标签的类下的方法上使用。(可以定义一个异常处理类@ControllerAdvice)他两一块使用可以统一拦截在Controller请求方法中抛出的异常。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值