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

目录

 

一、spring boot 整合测试

二、RestController与Rest讲解

1,RestController 例子

2,什么是REST?

三、接收路径参数

四、spring boot中的日志管理

1,日志管理的基本概念

2,spring boot中设置日志管理

3,关闭sl4j,开启log4j

五、配置开发者模式

六、访问静态资源

七、定义消息转化器

八、使用fastjson解析json数据

九、自定义拦截器


一、spring boot 整合测试

1,创建父工程、子工程

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

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


   
       
            org.springframework.boot
            spring-boot-dependencies
            2.0.5.RELEASE
            pom
            import
       

   

 

父级项目:

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

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

子项目:

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

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


    com.unicom.parent
    SpringBoot_Parent
    0.0.1-SNAPSHOT
 

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

2,进行整合测试

需要依赖两个包

Spring-boot-starter-test

Junit

    <dependency>

        <groupId>org.springframework.bootgroupId>

        <artifactId>spring-boot-starter-testartifactId>

        <scope>testscope>

    dependency>

    

    <dependency>

        <groupId>junitgroupId>

        <artifactId>junitartifactId>

        <scope>testscope>

    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 例子

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

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上的值咯,这种用法如下:

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

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

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

四、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  确定的嘛

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

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

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

3,关闭sl4j,开启log4j

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


  
   org.springframework.boot
   spring-boot-starter
   
    
     org.springframework.boot
     spring-boot-starter-logging
    

   

  

  
   org.springframework.boot
   spring-boot-starter-log4j
   1.3.8.RELEASE
  

来一份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.springframeworkgroupId>

        <artifactId>springloadedartifactId>

        <version>1.2.8.RELEASEversion>

    dependency>

    <dependency>

        <groupId>org.springframework.bootgroupId>

        <artifactId>spring-boot-devtoolsartifactId>

    dependency>

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

spring.thymeleaf.cache=false

六、访问静态资源

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

Js   css    img

第一种方式:

默认路径

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

 

自定义配置:

在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有两步:

第一步:导入依赖

<dependency>

    <groupId>com.alibabagroupId>

    <artifactId>fastjsonartifactId>

    <version>1.2.50version>

dependency>

第一种方式:

继承   WebMvcConfigurerAdapter

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

第二种方式:

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

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

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

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

九、自定义拦截器

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

 

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

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

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

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

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,maven,spring,boot)