spring boot笔记4——spring boot 整合测试、RestController与Rest讲解、接收路径参数、日志管理、配置开发者模式、访问静态资源、定义消息转化器、自定义拦截器

11 篇文章 0 订阅
5 篇文章 0 订阅

目录

 

一、spring boot 整合测试

二、RestController与Rest讲解

1,RestController 例子

2,什么是REST?

三、接收路径参数

四、spring boot中的日志管理

1,日志管理的基本概念

2,spring boot中设置日志管理

3,关闭sl4j,开启log4j

五、配置开发者模式

六、访问静态资源

七、定义消息转化器

八、使用fastjson解析json数据

九、自定义拦截器


一、spring boot 整合测试

1,创建父工程、子工程

打包方式:pom;pom的打包方式可以支持<modules>模块,这个东东还好用的,开发的时候,各个模块各自玩各自的,一到上项目的时候,就组合起来了。而且导包也很方便,一次性全都会导到workspace里的。

当然如果你要作为父项目,很重要的一点是要设置 <dependencyManagement>,子项目就可以不用写版本号了,同一版本,免得一上项目就各种不兼容。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
  </dependencyManagement>

父级项目:

子项目:

子项目当然要有<parent>,这样就可以引用父项目的依赖管理啦!

<parent>
    <groupId>com.unicom.parent</groupId>
    <artifactId>SpringBoot_Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>

2,进行整合测试

需要依赖两个包

Spring-boot-starter-test

Junit

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-test</artifactId>

        <scope>test</scope>

    </dependency>

    

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <scope>test</scope>

    </dependency>

 

然后嘛编写测试类(重点):

package com.unicom.springboot.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import junit.framework.TestCase;


//指定当前要测试的类
@SpringBootTest(classes=HelloController.class)
指定实现测试的类
@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(SpringRunner.class)
和web整合
@WebAppConfiguration

public class UserControllerTest {
    @Autowired // 自动注入要测试的类
    private HelloController helloController;

    @Test
    public void testHello() {
        String hello = helloController.hello();
        System.out.println(hello);
        // 使用断言进行测试
        TestCase.assertEquals(this.helloController.hello(), "hello");
    }
}

 

嘿嘿,打印一下结果看看:

把controller的返回值拿了过来!终于成功了!(spring mvc可以自己试一试,test这个类算核心部分啦)南雁的另一篇文章,有讲之前一直失败的原因。-_-|| eclipse还是有许多坑的,maven的junit死活引用不了!

顺便说明下assert,这个类的方法很有意思。assert又叫断言,它默认断言的的条件为真,不然就不抛出异常!比如这句,如果helloController返回的不是hello,它就报错!

TestCase.assertEquals(this.helloController.hello(), "hello");

 

二、RestController与Rest讲解

1,RestController 例子

RestController很好理解的,就是它的方法,不用设定,默认返回的内容都是response body里的内容。

2,什么是REST?

为什么它叫rest?这个名字很常见的样子呀!

REST即Representational State Transfer的缩写,可译为"表现层状态转化”。REST最大的几个特点为:资源、统一接口、URI和无状态。

一个名词一个名词的来看一下。资源,就是txt,jpg,mp3等各类文件,通常以Representation为载体显示,像json就是一种Representation咯

统一接口嘛,统一的数据操作接口,CRUD(create, read, update和delete),GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

URI,指每个URI都对应一个特定的资源。

无状态,指的是通过url就能获取资源,不用登陆啥的,没有权限问题。

三、接收路径参数

何为路径参数,就是url上的值咯,这种用法如下:

输入url,相关的效果就是这样的:

四、spring boot中的日志管理

1,日志管理的基本概念

先来说明下日志管理的基础概念

日志管理中,日期时间可精确到毫秒,日志级别如下:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE

越右边的越细致咯,比如debug,可以输出很多调试的信息。

为什么要用日志管理啊?它是干嘛的?这个嘛,我把它当成一个框架用来做输出信息的东东。为什么这么说呢,因为框架运行会有很多信息嘛,如果不输出来,开发的人不知道它进行到哪一步了,一旦出错,又很难排查,真的烦。所以嘛,就要用个logger来打印输出各个级别的内容咯。

一般有两种日志的实现,sl4j和log4j

看下这段代码就知道日志是用来干嘛的:

static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());

然后在main程序中,突然发生了点什么,然后打印出信息:

logger.info("Client socket: " + client);

是吧,日志的概念很好理解的。

2,spring boot中设置日志管理

在 application.properties 中加入如下内容:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.file=d\:\\springbootlog\\log.log
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH\:mm\:ss} [%thread] %-5level %logger- %msg%n

来看一下控制台的输出效果:

2018/10/08-14:46:03 [main] DEBUG org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping- Rejected bean name 'messageSource': no URL paths identified
这个格式其实就是 logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n  确定的嘛

然后在硬盘上真的有个文件了:

这个文件是由于  logging.file=d\:\\springbootlog\\log.log  这句产生的

3,关闭sl4j,开启log4j

关闭的话,将依赖去除即可,用<exclusion>,之后再引入log4j的依赖就好了:

<!-- 使用log4j -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
   <exclusions>
    <exclusion>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j</artifactId>
   <version>1.3.8.RELEASE</version>
  </dependency>

来一份log4j的配置,写在log4j.properties中,放在resourses中即可直接引用(为啥这个配置文件没有在哪里写它都可以自动加载呢?):

log4j.rootLogger=DEBUG,CONSOLE

 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 log4j.appender.Threshold=DEBUG
 log4j.appender.CONSOLE.Target=System.out
 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
 #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

 

五、配置开发者模式

用这段代码之后就可以不用重启,就可以修改代码后重新运行了哦!

<!-- 开发模式: 以下两个依赖,修改代码后,不需要重新运行 -->

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>springloaded</artifactId>

        <version>1.2.8.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-devtools</artifactId>

    </dependency>

嘿嘿,还有一个热部署,如果你开发过thymeleaf就会发觉为啥老要重新启动才能看html,在application.properties中加入如下设置就可以实现thymeleaf的热部署了!

spring.thymeleaf.cache=false

六、访问静态资源

默认情况:spingboot 从 classpath 下的 /static  /public 或者 /meta-inf/resources文件夹或 ServletContext 根目录提供静态内容

Js   css    img

第一种方式:

默认路径

 

自定义配置:

在application.properties中手动配置静态资源路径

spring.resources.static-locations=classpath:/static/

七、定义消息转化器

会不会存在乱码的情况?嘿嘿,你试试用ISO8859-1,果然前台显示有点奇怪

// 定义消息转化器
 @Bean
 public StringHttpMessageConverter stringHttpMessageConverter(){
  StringHttpMessageConverter converter= new StringHttpMessageConverter(Charset.forName("ISO8859-1"));
  return converter;
 }

采用这个url 一测试,果然乱码了!

再改回来:

 // 定义消息转化器
 @Bean
 public StringHttpMessageConverter stringHttpMessageConverter(){
  StringHttpMessageConverter converter= new StringHttpMessageConverter(Charset.forName("UTF-8"));
  return converter;
 }

就没有问题了

八、使用fastjson解析json数据

使用fastjson有两步:

第一步:导入依赖

<!-- 使用fastjson  依赖 -->

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>fastjson</artifactId>

    <version>1.2.50</version>

</dependency>

第一种方式:

继承   WebMvcConfigurerAdapter

 

第二种方式:

 

说起来阿里巴巴还是很强大的,好多技术成果都开源出来可以供我们使用。

有了这个之后,restcontroller,显示出来的结果是这个样子的:

是不是有个引号,这就是json格式咯。

九、自定义拦截器

1,首先继承  WebMvcConfigurerAdapter 并重写父类方法

 

2,写好拦截器内容,然后,注册!注册挺有意思的 /** 表示对所有的路径都有

3,spring boot的启动程序要扫描这个包

已输入一个url就会有一条信息打印在控制台:

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值