本文分为三个部分。导入坐标、基本使用、参考文章。
1.导入坐标
Jackson 的核心模块由三部分组成。
- jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
- jackson-annotations,注解包,提供标准注解功能;
- jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。
jackson-databind 依赖 jackson-core 和 jackson-annotations,所以可以只显示地添加jackson-databind依赖,jackson-core 和 jackson-annotations 也随之添加到 Java 项目工程中。
所以一般只需要导入jackson-databind即可(spring-boot-starter-web内嵌了jackson依赖)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2.基本使用
ObjectMapper 是 Jackson 库中最常用的一个类,使用它可以进行 Java 对象和 JSON 字符串之间快速转换。如果你用过 FastJson,那么 Jackson 中的 ObjectMapper
就如同 FastJson 中的 JSON 类。
我们主要使用这两个方法。
readValue()
方法可以进行 JSON 的反序列化操作,比如可以将字符串、文件流、字节流、字节数组等将常见的内容转换成 Java 对象。writeValue()
方法可以进行 JSON 的序列化操作,可以将 Java 对象转换成 JSON 字符串。
注意:JavaBean要配置正确的Getter、Setter方法。
下面为示例:
我创建了一个bean,然后将其转化为Json字符串,可以用writeValue也可以用writeValueAsString方法。如果要序列化时间,还需要导入一个依赖。
@GetMapping("/active/send")
public Result sendMessage2(String message, String sender, @RequestParam(required = true) String receiver) throws JsonProcessingException {
// 构建物流信息
LogisticsMessage logisticsMessage = LogisticsMessage.builder()
.sendTime(LocalDateTime.now())
.destination(receiver)
.description(message)
.sender(sender)
.receiver(receiver)
.build();
// 注册时间模块
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
String jsonMessage = objectMapper.writeValueAsString(logisticsMessage);
jmsMessagingTemplate.convertAndSend(receiver, jsonMessage);
return Result.success("成功");
}