目录
4.1返回json数据
JSON是目前主流的前后端数据传输方式,spring MVC中使用消息转换器,HttpMessageConverter对JSON的转换提供了很好的支持,在Spring Boot中更近一步,对相关配置做了更近一步的简化,默认情况下,当开发者新创建一个spring boot项目后,添加Web依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId> spring-boot-starter-web</artifactId>
</dependency>
这个依赖中默认加入jackson-databind作为JSON触发器,此时不需要添加额外的JSON处理器就能返回一段JSON。创建一个BOOK实体:
package org.sang.chapter07;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Book {
@JsonFormat
private String name="aa";
private String author="bb";
@JsonIgnore
private Float price=30f;
@JsonFormat(pattern ="yyyy-MM-dd")
private Date publicationDte;
public void setName(String aname)
{
this.name =aname;
}
public void setAuthor(String aauthor)
{
this.author =aauthor;
}
public void setPrice(Float aprice)
{
this.price =aprice;
}
public void setDate(Date adate)
{
this.publicationDte =adate;
}
public String getName()
{
return name;
}
public String getAuthor()
{
return author;
}
}
然后创建BookControoler,返回对象即可:
package org.sang.chapter07;
import java.util.Date;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BookController {
@GetMapping("/book")
public Book book()
{
Book book = new Book();
book.setAuthor("罗贯中");
book.setName("三国演义");
book.setPrice(30f);
book.setDate(new Date());
System.out.print(book.getName());
System.out.print(book.getAuthor());
return book;
}
}
4.1.2自定义转换器
常见的JSON处理器除了 jack-databind 之外,还有Gson和fastjson。这里针对常见用法分别举例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId> spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
package org.sang.chapter07;
import java.lang.reflect.Modifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@Configuration
public class GsonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter()
{
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("yyyy-MM-dd");
builder.excludeFieldsWithModifiers(Modifier.PROTECTED);
Gson gson = builder.create();
converter.setGson(gson);
return converter;
}
}
2.使用fastjson*(我没有手动尝试,我是个弱鸡)
2. 使用fastjson
fastjson 是阿里巴巴的一个开源JSON 解析框架, 是目前JSON 解析速度最快的开源框架,该
框架也可以集成到Spring Boot 中。不同于Gson, fastjson 继承完成之后并不能立马使用, 需要开
发者提供相应的HttpMessageConverter 后才能使用,集成fastjson 的步骤如下。
首先除去j ackson-databind 依赖,引入fastjson 依赖:
4.2静态配置访问
在SpringMVC 中,对于静态资源都需要开发者手动配置静态资源过滤。Spring Boot 中对此也
提供了自动化配置,可以简化静态资源过滤配置。
在WebMvcAutoConfiguration 类中有一个静态内部类WebMvcAutoConfigurationAdapter , 实现
了4. 1 节提到的WebMvcConf1gurer 接口。WebMvcConfigurer 接口中有一个方法addResourceHandlers,
是用来配置静态资源过滤的。方法在WebMvcAutoConfigurationAdapter 类中得到了实现,部分核
心代码如下:
Spring Boot 在这里进行了默认的静态资源过滤配置,其中staticPathPattern 默认定义在
WebMvcProperties 中,定义内容如下:
如果开发者使用IntelliJ IDEA 创建Spring Boot 项目, 就会默认创建出classpath:/static/ 目录,
静态资源一般放在这个目录下即可。
4.2.2 自定义策略
4.3文件上传
首先创建一个Spring Boot 项目并添加spring-boot-starter-web 依赖。
然后在resources 目录下的static 目录中创建一个upload.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="uploadFile" value="请选择文件">
<input type="submit" value="上传">
</form>
</body>
</html>
这是一个很简单的文件上传页面,上传接口是/upload , 注意请求方法是post , enctype 是
multipart/form - data 。
接着创建文件上传处理接口,代码如下:
package org.sang.chapter07;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
@RestController
public class FileUploadController {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd/");
@PostMapping("/upload")
public String upload(MultipartFile uploadFile,HttpServletRequest req)
{
String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
String format = sdf.format(new Date());
File folder = new File(realPath + format);
if(!folder.isDirectory())
{
folder.mkdirs();
}
String oldName = uploadFile.getOriginalFilename();
String newName = UUID.randomUUID().toString()+
oldName.subSequence(oldName.lastIndexOf("."), oldName.length());
try {
uploadFile.transferTo(new File(folder,newName));
String filePath =req.getScheme() +"://"+req.getServerName()+":"
+req.getServerPort()+"/uploadFile/"+format+newName;
return filePath;
}catch(IOException e)
{
e.printStackTrace();
}
return "上传失败";
}
}
4.3.2多文件上传
多文件上传和单文件上传基本一致, 首先修改HTML 文件,代码如下: