<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {
/**
* 用户id
*/
@JsonProperty(value = "user_id")
private String userId;
/**
* 用户名称
*/
@JsonProperty(value = "user_name")
private String userName;
}
序列化
@Test
public void test1() throws JsonProcessingException {
UserDTO userDTO = new UserDTO();
userDTO.setUserId("0001");
userDTO.setUserName("李白");
// jackson提供的打印成json字符串
System.out.println(new ObjectMapper().writeValueAsString(userDTO));
System.out.println("===============================================");
// fastjson提供的打印成json字符串
System.out.println(JSON.toJSONString(userDTO));
}
/*
运行结果:
{"user_id":"0001","user_name":"李白"}
====================================
{"userId":"0001","userName":"李白"}
*/
反序列化
@Test
public void test2() throws IOException {
// fastjson的反序列化 对于仅仅支持类属性或其驼峰命名属性
String paramStr = "{\"userId\":\"0001\",\"userName\":\"李白\"}";
String paramStr2 = "{\"user_id\":\"0001\",\"user_name\":\"李白\"}";
System.out.println(JSON.parseObject(paramStr, UserDTO.class));
System.out.println(JSON.parseObject(paramStr2, UserDTO.class));
System.out.println("===============================================");
// jackson 不支持此实体类原有属性的反序列化,因其只通过读取注解上值进行反序列化
//jackson可以通过 @JsonProperty 起别名 当别名传进来时可以通过
//转为实体类里的名字
// 成功
String paramStr3 = "{\"user_id\":\"0001\",\"user_name\":\"李白\"}";
System.out.println(new ObjectMapper().readValue(paramStr3.getBytes(),UserDTO.class));
// 失败 会报错 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
String paramStr4 = "{\"userId\":\"0001\",\"userName\":\"李白\"}";
}