SpringBoot unit 3th

mmayanshuo 2019-10-18

第三单元SpringBoot日志,集成测试,定时器,过滤器,servlet配置
1【授课重点】
1)SpringBoot日志,
2)SpringBoot过滤器,
3)SpringBoot拦截器,
4)定时器,
2【考核要求】
1)SpringBoot拦截器,
2)SpringBoot过滤器,
3)SpringBoot默认日志,
3【教学内容】
3.1课程导入
1、为什么要有SpringBoot拦截器
2、为什么要有SpringBoot单元测试
3.2SpringBoot日志
Spring Boot使用Apache Commons日志记录进行所有内部日志记录。Spring Boot的默认配置支持使用Java Util Logging,Log4j2和Logback。 使用这些,可以配置控制台日志记录以及文件日志记录。
如果使用的是Spring Boot Starters,Logback将为日志记录提供良好的支持。 此外,Logback还提供对Common Logging,Util Logging,Log4J和SLF4J的良好支持。
3.3日志格式
默认的Spring Boot Log格式显示在下面给出的屏幕截图中。

它提供以下信息 -
提供日志日期和时间的日期和时间。
日志级别显示有:INFO,ERROR或WARN。
进程ID。
---是一个分隔符。
线程名称括在方括号[]中。
记录器名称,显示源类名称。
日志消息。
3.4控制台日志输出
默认日志消息将打印到控制台窗口。 默认情况下,INFO,ERROR和WARN日志消息将打印在日志文件中。
如果必须启用调试级别日志,请使用以下命令在启动应用程序时添加调试标志 -
java –jar demo.jar --debug
还可以将调试模式添加到application.properties 文件中,如下所示 -
debug = true
3.5文件日志输出
默认情况下,所有日志都将在控制台窗口中打印,而不是在文件中打印。 如果要在文件中打印日志,则需要在application.properties 文件中设置属性logging.file 或logging.path 。
可以使用下面显示的属性指定日志文件路径。 请注意,日志文件名是spring.log。

使用下面显示的属性指定自己的日志文件名

注意 - 文件将在达到10MB后自动旋转生成。
3.6日志级别
Spring Boot支持所有记录器级别,例如:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。在application.properties 文件中定义Root logger,如下所示

注 - Logback不支持“FATAL”级别日志。 它映射到“ERROR”级别日志。
3.7配置Logback
Logback支持基于XML的配置来处理Spring Boot Log配置。日志配置详细信息在logback.xml文件中配置。logback.xml文件应放在classpath下。
可以使用下面给出的代码在Logback.xml文件中配置ROOT级别日志

在下面给出的Logback.xml文件中配置控制台appender。

使用下面给出的代码在Logback.xml文件中配置文件appender。 请注意,需要在文件追加器中指定日志文件路径。

使用下面给出的代码在logback.xml文件中定义日志模式。还使用下面给出的代码在控制台或文件日志附加程序中定义支持的日志模式集

完整的logback.xml文件的代码如下所示。必须将其放在类路径中。

下面给出的代码显示了如何在Spring Boot主类文件中添加slf4j logger。

在控制台窗口中看到的输出显示在此处

在此处显示日志文件中显示的输出

3.8Spring Boot异常处理

处理API中的异常和错误并向客户端发送适当的响应对企业应用程序有利。在本章中,将学习如何在Spring Boot中处理异常。
在继续进行异常处理之前,了解以下注解。
3.8.1控制器Advice
@ControllerAdvice是一个注解,用于全局处理异常。
3.8.2异常处理程序
@ExceptionHandler是一个注释,用于处理特定异常并将自定义响应发送到客户端。使用以下代码创建@ControllerAdvice类来全局处理异常

定义一个扩展RuntimeException类的子类。

可以定义@ExceptionHandler方法来处理异常,如图所示。 此方法应用于编写Controller Advice类文件。

现在,使用下面给出的代码从API中抛出异常。

3.9Spring Boot拦截器

在Spring Boot中使用拦截器,可在以下情况下执行操作 -
在将请求发送到控制器之前
在将响应发送给客户端之前
例如,使用拦截器在将请求发送到控制器之前添加请求标头,并在将响应发送到客户端之前添加响应标头。
要使用拦截器,需要创建支持它的@Component类,它应该实现HandlerInterceptor接口。
以下是在拦截器上工作时应该了解的三种方法 -
preHandle()方法 - 用于在将请求发送到控制器之前执行操作。此方法应返回true,以将响应返回给客户端。
postHandle()方法 - 用于在将响应发送到客户端之前执行操作。
afterCompletion()方法 - 用于在完成请求和响应后执行操作。

请注意以下代码以便更好地理解

必须使用WebMvcConfigurerAdapter向InterceptorRegistry注册此Interceptor,如下所示

在下面给出的示例中,将使用GET产品API,该API提供的输出如下 -
Interceptor类ProductServiceInterceptor.java的代码如下

应用程序配置类文件的代码将拦截器注册到拦截器注册表,ProductServiceInterceptorAppConfig.java如下

Spring Boot应用程序类主要的文件DemoApplication.java 的代码如下

--ProductServiceInterceptor类如果不用@Component注解可以吗?
--如果不用@Component注解,那么应该如何使用?
--请尝试着把这个案例修改为不用@Component注解的形式?

3.10Spring Boot Servlet过滤器
过滤器是用于拦截应用程序的HTTP请求和响应的对象。通过使用过滤器,可以在两个实例上执行两个操作 -
在将请求发送到控制器之前
在向客户发送响应之前。
以下代码显示了带有@Component注解的Servlet过滤器实现类的示例代码。

以下示例显示了在将请求发送到控制器之前从ServletRequest对象读取远程主机和远程地址的代码。
在doFilter()方法中,添加了System.out.println()语句来打印远程主机和远程地址

在Spring Boot主应用程序类文件中,添加了返回“Hello World”字符串的简单REST端点。

3.11Spring Boot Rest模板(Rest请求是不是重点)

Rest模板用于创建使用RESTful Web服务的应用程序。使用exchange()方法为所有HTTP方法使用Web服务。 下面给出的代码显示了如何创建Rest模板Bean以自动连接Rest模板对象。

3.11.1GET

通过使用RestTemplate类的exchange()方法来使用GET API,
假设此URL => http://localhost:8080/products返回以下JSON,将使用以下代码使用Rest Template来使用此API响应

必须遵循给定的点来使用API -
自动装配Rest模板对象。
使用HttpHeaders设置请求标头。
使用HttpEntity包装请求对象。
为Exchange()方法提供URL,HttpMethod和Return类型。

3.11.2Post
通过使用RestTemplate的exchange()方法来使用POST API
假设此URL => http://localhost:8080/products返回如下所示的响应,使用Rest模板测试此API响应。
下面给出的代码是请求正文

相关推荐