文章目录
1. 整合Gson
还是在上一个创建的工程里
修改pom.xml
把json包排除出去,在把gson包依赖添加进来
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
启动,查看数据格式:
可以看到默认日期格式如上。
下面进行自定义修改,修改WebMvcConfig.java
@Configuration
public class WebMvcConfig {
// @Bean
// MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
// MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
// converter.setObjectMapper(objectMapper);
// return converter;
// }
// @Bean
// ObjectMapper objectMapper(){
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
// return objectMapper;
// }
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create());
return converter;
}
}
再次运行,查看结果:
也可以只改Gson即可,修改WebMvcConfig.java
// @Bean
// GsonHttpMessageConverter gsonHttpMessageConverter(){
// GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
// converter.setGson(new GsonBuilder().setDateFormat("yyyy/MM/dd").create());
// return converter;
// }
@Bean
Gson gson(){
return new GsonBuilder().setDateFormat("yyyy/MM/dd").create();
}
结果是一样的
2. 整合Fastjson
首先去掉Gson依赖,添加Fastjson依赖
<!--<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
手动添加转换器,修改WebMvcConfig
// @Bean
// Gson gson(){
// return new GsonBuilder().setDateFormat("yyyy/MM/dd").create();
// }
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
return converter;
}
启动查看结果:
自定义格式,修改WebMvcConfig
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd");
converter.setFastJsonConfig(config);
return converter;
}
查看结果:
3. 静态资源访问
3.1 系统默认位置
Spring Boot默认了五个位置放置静态资源,优先级从高到低分别是:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
- webapp下
下面测试前4个,分别在各自位置创建相同的js文件,如下:
启动,结果如下:
删掉/META-INF/resources/
下的文件,重新启动,结果:
删掉/resources/
下的文件,重新启动,结果:
删掉/static/
下的文件,重新启动,结果:
3.2 自定义静态资源位置
3.2.1 修改配置文件
创建自定义静态资源访问位置
修改application.properties
spring.resources.static-locations=classpath:/sky/
重启项目,结果如下:
3.2.2 Java配置类
修改WebMvcConfig
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/sky/");
}
}
4. Spring Boot文件上传
创建上传controller
@RestController
public class FileUploadController {
SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
@PostMapping("/upload")
public String upload(MultipartFile file, HttpServletRequest request){
String format = sdf.format(new Date());
String realPath = request.getServletContext().getRealPath("/img") + format;
File folder = new File(realPath);
if (!folder.exists()) {
folder.mkdirs();
}
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf('.'));
try {
file.transferTo(new File(folder, newName));
String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;
return url;
}catch (IOException e){
e.printStackTrace();
}
return "error";
}
}
创建测试的html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file", name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
测试,查看结果:
注意:若有特殊设置,则在application.properties
配置即可
以上传文件大小为例:
spring.servlet.multipart.max-file-size=1KB
再次上传大于1KB的图片,就会报错,如下:
5. Ajax实现文件上传
下载jquery包放在static
目录下,下载地址:Jquery下载
只改前端页面即可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.3.1.js"></script>
</head>
<body>
<div id="result"></div>
<input type="file" id="file">
<input type="button" value="上传" onclick="uploadFile()">
<script>
function uploadFile() {
var file = $("#file")[0].files[0];
var formData = new FormData();
formData.append("file", file);
$.ajax({
type: 'post',
url: '/upload',
processData: false,
contentType: false,
data: formData,
success: function (msg) {
$("#result").html(msg);
}
})
}
</script>
</body>
</html>
启动后,结果如下:
6. 多文件上传
创建前端页面index3.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/uploads" method="post" enctype="multipart/form-data">
<input type="file", name="files" multiple>
<input type="submit" value="提交">
</form>
</body>
</html>
创建后端服务
@PostMapping("/uploads")
public String uploads(MultipartFile[] files, HttpServletRequest request){
String format = sdf.format(new Date());
String realPath = request.getServletContext().getRealPath("/img") + format;
File folder = new File(realPath);
if (!folder.exists()) {
folder.mkdirs();
}
for (MultipartFile file : files) {
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf('.'));
try {
file.transferTo(new File(folder, newName));
String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;
System.out.println(url);
}catch (IOException e){
e.printStackTrace();
}
}
return "success";
}
运行,结果: