内容
- springboot 中拦截器的使用
- 配置拦截器 (实现 HandlerInterceptor 接口的类)
- 定义配置类,配置拦截路径和放行路径
- springboot 中添加虚拟目录映射
- springboot 中转换器的使用
- 配置文件中配置或使用@DateTimeFormat(pattern = "yyyy-MM-dd") 注解
- springboot 中项目虚拟目录和本地磁盘的映射配置
- 启动类可以作为配置类使用
代码
pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>priv.noby</groupId>
<artifactId>springboot4</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot4</name>
<description>springboot4</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<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>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency> </dependencies> </dependencyManagement>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration> <source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration> <mainClass>priv.noby.springboot4.Springboot4Application</mainClass>
</configuration> <executions> <execution> <id>repackage</id>
<goals> <goal>repackage</goal>
</goals> </execution> </executions> </plugin> </plugins> </build>
</project>
配置文件
spring:
application:
name: springboot4
mvc:
format:
date: yyyy-MM-dd
server:
port: 8080
logging:
level:
priv.noby.note.springboot4: error
upload:
resourceHandler: /image/**
resourceHandLocations: D:/media/image/精选/
entity
package priv.noby.springboot4.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private String password;
}
package priv.noby.springboot4.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ResponseResult<T>{
private Integer code;
private String msg;
private T data;
}
exception
package priv.noby.springboot4.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import priv.noby.springboot4.entity.ResponseResult;
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(NullPointerException.class)
public ResponseResult<Exception> doExceptionHandler(Exception e){
System.out.println("ExceptionHandlerController.doExceptionHandler");
return new ResponseResult<>(500, "MyNullPointerException", e);
}
}
intercepter
package priv.noby.springboot4.intercepter;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getSession().getAttribute("user") == null) {
response.setContentType("test/html;charset=utf-8");
response.getWriter().write("未登录");
return false;
}
return true;
}
}
config
package priv.noby.springboot4.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import priv.noby.springboot4.intercepter.LoginInterceptor;
@Configuration
public class MyWebMvcConfig {
@Value("${upload.resourceHandler}")
private String resourceHandler;
@Value("${upload.resourceHandLocations}")
private String resourceHandLocations;
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/student/doSomethingAfterLogin")
.excludePathPatterns("/student/login");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(resourceHandler).addResourceLocations("file:///" + resourceHandLocations);
}
};
}
}
controller
package priv.noby.springboot4.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/dep")
public class DepController {
@Value("${upload.resourceHandLocations}")
private String resourceHandLocations;
@PostMapping("/selectById")
public void selectById(MultipartFile uploadFile) {
System.out.println("DepController.selectById");
try {
uploadFile.transferTo(new File(resourceHandLocations, uploadFile.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
package priv.noby.springboot4.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
@RequestMapping("/emp")
public class EmpController {
@GetMapping("/selectById")
public Date selectById(Date date) {
System.out.println("EmpController.selectById");
System.out.println("date = " + date);
return date;
}
}
package priv.noby.springboot4.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping(value = "/person",produces = "application/json;charset=utf-8")
@RestController
public class PersonController {
@GetMapping("/createNullPointer")
public String createNullPointer() {
System.out.println("PersonController.createNullPointer");
String str = null;
str.equals("null");
return "未发生异常";
}
}
package priv.noby.springboot4.controller;
import org.springframework.web.bind.annotation.*;
import priv.noby.springboot4.entity.User;
import javax.servlet.http.HttpSession;
@RequestMapping(value = "/student",produces = "application/json;charset=utf-8")
@RestController
public class StudentController {
@GetMapping("/doSomethingAfterLogin")
public String doSomethingAfterLogin(HttpSession session) {
System.out.println("StudentController.doSomethingAfterLogin");
User user = (User) session.getAttribute("user");
return user.getName() + "操作成功";
}
@PostMapping("/login")
public String login(@RequestBody User user, HttpSession session) {
System.out.println("StudentController.login");
if ("noby".equals(user.getName()) && "123".equals(user.getPassword())) {
session.setAttribute("user", user);
}
return "登录成功";
}
}
http
### springboot 请求 上传文件
POST http://localhost:8080/dep/selectById
Content-Type: multipart/form-data; boundary=WebAppBoundary
#一个WebAppBoundary包含内的即代表一个form中的input标签
--WebAppBoundary
Content-Disposition: form-data; name="uploadFile"; filename="aa.jpg"
< D:/media/image/aa.jpg
--WebAppBoundary--
### springboot 虚拟路径配置的测试(获取的本地磁盘的D:/media/image/精选/目录)
GET http://localhost:8080/image/984271.jpg
# 默认的转换器时间格式date=2022/10/12
### 类型转换器的使用
GET http://localhost:8080/emp/selectById?date=2022-10-12
### 测试全局异常
GET http://localhost:8080/person/createNullPointer
### 登录成功后执行操作(未登录将会被拦截器拦截)
GET http://localhost:8080/student/doSomethingAfterLogin
### 登录
POST http://localhost:8080/student/login
Content-Type: application/json
{
"name": "noby",
"password": "123"
}