Spring MVC 中使用消息转换器HttpMessageConverter 对JSON 的转换提供了很好的支持。
在Spring Boot 中只要有Web 依赖,这个依赖中默认加入了jackson-databind 作为JSON 处理器,此时不需要添加额外的JSON 处理器就能返回一段JSON 了。
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency>
创建一个Book 实体类:
public class Book { private String name ; private String author; @Jsonignore -> 无视这个property,不转换成json返回 private Float price; @JsonFormat(pattern=”yyyy-MM-dd”) -> 时间的打印格式 private Date publicationDate; //省略 getter/setter }
然后创建BookController , 返回Book 对象即可:
@RestController public class BookController { @GetMapping ("/book") public Book book() { Book book= new Book(); book.setAuthor("罗贯中"); book.setName("三国演义"); book.setPrice(30f); book.setPublicationDate(new Date()); return book; } }
前端接受到的就是json格式的内容了:
{"name": "三国演义", "author": "罗贯中", "publicationDate:"2018-07-08"}
对于字段忽略、日期格式化等常见需求都可以通过注解来解决。这是通过Spring 中默认提供的MappingJackson2HttpMessageConverter 来实现的,当然开发者也可以根据实际需求自定义JSON 转换器。
4.1.2. 自定义转换器
常见的JSON 处理器除了jackson-databind 之外, 还有Gson 和fastjson。
1 使用Gson
使用Gson ,需要先除去默认的jackson-databind,然后加入Gson 依赖
<dependency> <groupid>org.springfrarnework.boot</groupId> <artifactid>spring-boot-starter-web</artifactid> <exclusions>
// 除去默认的jackson-databind <exclusion> <groupid>com.fasterxrnl.jackson.core</groupid> <artifactid>jackson-databind</artifactid> </exclusion> </exclusions> </dependency>
// 加入Gson 依赖 <dependency> <groupid>com.google.code.gson</groupId> <artifactid>gson</artifactid> </dependency>
由于Spring Boot中默认提供了Gson 的自动转换类GsonHttpMessageConvertersConfiguration, 因此Gson 的依赖添加成功后, 可以像使用jackson-databind 那样直接使用Gson 。
但是在Gson 进行转换时, 如果想对日期数据进行格式化,那么还需要开发者自定义HttpMessageConverter。
@Configuration public class GsonConfig { @Bean GsonHttpMessageConverter gsonHttpMessageConverter() { GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); GsonBuilder builder = new GsonBuilder();
// 设直Gson 解析时日期的格式 builder.setDateFormat(”yyyy-MM-dd”);
// 设直Gson 解析时修饰符为protected 的字段被过滤掉。就和jsonignored同效果
// protected Float price; 那么在json中就不会显示price了 builder.excludeFieldsWithModifiers(Modifier.PROTECTED); Gson gson = builder.create(); converter.setGson(gson); return converter; }
}
2. 使用fastjson
fastjson 是阿里巴巴的一个开源JSON 解析框架, 是目前JSON 解析速度最快的开源框架,该框架也可以集成到Spring Boot 中。不同于Gson, fastjson 继承完成之后并不能立马使用, 需要开发者提供相应的HttpMessageConverter 后才能使用。配设过程比较复杂,需要用时请看书或上网搜索。
//
原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/271447.html