前言
SpringBoot是一个基于Spring框架的快速开发脚手架,它提供了快速集成各种常用功能的能力,比如文件上传下载、日志记录、参数校验等。
本文将通过代码示例实现SpringBoot项目中实现这些功能。
一、文件上传与下载
1.1 添加依赖
首先,需要在pom.xml文件中添加SpringBoot的Web依赖和文件上传依赖:
代码语言:javascript复制<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
1.2 配置文件
在application.properties中配置文件上传的大小限制:
代码语言:javascript复制spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=10MB
1.3 文件上传 编写控制器
代码语言:javascript复制import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
// 获取文件名
String fileName = file.getOriginalFilename();
// 文件处理逻辑,例如保存到服务器上的某个目录
// file.transferTo(new File("/path/to/destination/" fileName));
return "You successfully uploaded " fileName "!";
} catch (Exception e) {
return "File upload failed: " e.getMessage();
}
} else {
return "Please upload a file other than an empty one.";
}
}
}
1.3 文件下载 编写控制器
代码语言:javascript复制import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
@RestController
public class FileDownloadController {
@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile() throws IOException {
String fileName = "example.txt"; // 要下载的文件名
File file = new File("/path/to/destination/" fileName);
// 将文件转换为字节数组
byte[] fileBytes = Files.readAllBytes(file.toPath());
// 设置响应的Header
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment; filename=" URLEncoder.encode(fileName, "UTF-8"));
// 返回ResponseEntity对象
return ResponseEntity.ok()
.headers(headers)
.contentLength(fileBytes.length)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(fileBytes);
}
}
二、日志记录
2.1 添加依赖
在pom.xml中添加日志框架依赖,例如使用SLF4J与Logback:
代码语言:javascript复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
2.2 使用日志
在类中注入Logger并使用:
代码语言:javascript复制import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SomeService {
private static final Logger logger = LoggerFactory.getLogger(SomeService.class);
public void someMethod() {
logger.info("some info message");
// 其他业务逻辑
}
}
三、参数校验
3.1 使用注解进行校验
代码语言:javascript复制import javax.validation.constraints.NotBlank;
public class SomeDTO {
@NotBlank(message = "Name cannot be empty")
private String name;
// getters and setters
}
3.2 编写控制器并使用校验
代码语言:javascript复制import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
@RestController
@Validated
public class SomeController {
@PostMapping("/some-endpoint")
public String handleSomeRequest(@Valid SomeDTO dto) {
// 处理请求
return "Request processed successfully";
}
}
四、传统的controller、service、impl层写法
代码语言:javascript复制@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private FileService fileService;
// 上传单个文件
@PostMapping("/upload")
public ResultVo<String> uploadFile(@RequestParam("file") MultipartFile file) {
return fileService.uploadFile(file);
}
}
服务层写法
代码语言:javascript复制public interface FileService {
// 上传文件
ResultVo<String> uploadFile(MultipartFile file);
}
FileServiceImpl写法
代码语言:javascript复制@Service
@Slf4j
public class FileServiceImpl implements FileService {
// 上传文件
@Override
public ResultVo<String> uploadFile(MultipartFile file) {
log.info("【文件上传】进入到文件上传方法");
// 1.参数校验
if (null == file || file.isEmpty()) {
log.error("【文件上传】文件为空!");
throw new ParamErrorException();
}
// 2.上传文件
ResultVo<String> resultVo = FileUtil.uploadFile(file);
return resultVo;
}
}
总结