目录
一、自定义ObjectMapper
1、测试实体类User
public class User implements Serializable {
private static final long serialVersionUID = 4519678979333403518L;
private String id;
private String userName;
private String realName;
private String password;
private String roleId;
private String roleName;
private String phoneNo;
private Date createTime;
public User() {
}
public User(String userName, String realName, String password, String roleName, String phoneNo) {
this.userName = userName;
this.realName = realName;
this.password = password;
this.roleName = roleName;
this.phoneNo = phoneNo;
}
// get和set 省略
}
2、控制层接口测试方法
/**
* @RestController 包含@Controller 和 @ResponseBody
* @ResponseBody 注解可以使对象序列化为JSON格式字符串,除此之外,Jackson也提供了反序列化方法
*/
@RestController
public class StudentController {
@Resource
private ObjectMapper objectMapper;
/** 获取自定义前-测试结果 */
@RequestMapping("/getUser")
public User getUser() {
User user = new User();
user.setId("1");
user.setUserName("Mr Li");
user.setRealName("Li");
user.setPassword("123456");
user.setPhoneNo("15000000000");
user.setCreateTime(new Date());
return user;
}
/** 获取自定义后-测试结果:Jackson通过使用mapper的writeValueAsString方法将Java对象序列化为JSON格式字符串-》序列化 */
@RequestMapping("/getUserByJson")
public String getUserByJson() {
User user = new User();
user.setId("2");
user.setUserName("Mr Li2");
user.setRealName("Li2");
user.setPassword("123456");
user.setPhoneNo("15000000000");
user.setCreateTime(new Date());
try {
return objectMapper.writeValueAsString(user);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 把json字符串转换成实体Bean(前提是json中的参数名要与实体bean一一对应,不然就会抛异常UnrecognizedPropertyException)-》反序列化
* @return String 结果:【Mr Li2 : 123456】
*/
@RequestMapping("/getJsonStrToUser")
public String getJsonStrToUser() {
String json = "{\"id\":\"2\",\"userName\":\"Mr Li2\",\"realName\":\"Li2\",\"password\":\"123456\",\"roleId\":null,\"roleName\":null,\"phoneNo\":\"15000000000\",\"createTime\":\"2020-12-14 16:31:29\"}";
try {
User user = objectMapper.readValue(json, User.class);
return user.getUserName() + " : " + user.getPassword();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
3、自定义前后对比
3-1、自定义前
访问地址:http://127.0.0.1:8080/springboot/getUser
结果:{"id":"1","userName":"Mr Li","realName":"Li","password":"123456","roleId":null,"roleName":null,"phoneNo":"15000000000","createTime":"2020-12-14T08:15:30.559+00:00"}
3-2、自定义后
3-2-1、自定义配置:在org.springboot.springboot01.config下,新增JacksonConfig配置类型
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
return objectMapper;
}
}
3-2-2、测试结果
访问地址:http://127.0.0.1:8080/springboot/getUserByJson
结果:{"id":"2","userName":"Mr Li2","realName":"Li2","password":"123456","roleId":null,"roleName":null,"phoneNo":"15000000000","createTime":"2020-12-14 16:30:31"}
二、Jackson注解
1、@JsonProperty
// 基于实体User类
@JsonProperty("loginName")
private String userName;
含义:@JsonProperty,作用在属性上,用来为JSON Key指定一个别名
地址:http://127.0.0.1:8080/springboot/getUser
结果:{"id":"1","realName":"Li","password":"123456","roleId":null,"roleName":null,"phoneNo":"15000000000","createTime":"2020-12-14 16:53:43","loginName":"Mr Li"}
2、@Jsonlgnore
// 基于实体User类
@JsonIgnore
private String roleId;
含义:@Jsonlgnore,作用在属性上,用来忽略此属性
地址:http://127.0.0.1:8080/springboot/getUser
结果(roleId已经不显示了):{"id":"1","realName":"Li","password":"123456","roleName":null,"phoneNo":"15000000000","createTime":"2020-12-14 16:57:03","loginName":"Mr Li"}
3、@JsonIgnoreProperties
@JsonIgnoreProperties({"roleId", "roleName"})
public class User implements Serializable {
// 省略...
}
含义:@JsonIgnoreProperties,忽略一组属性,作用于类上
地址:http://127.0.0.1:8080/springboot/getUser
结果:{"id":"1","realName":"Li","password":"123456","phoneNo":"15000000000","createTime":"2020-12-14 17:02:19","loginName":"Mr Li"}
4、@JsonFormat
说明:在自定义配置类JacksonConfig中,有设置时间格式,当在字段头中,加了@JsonFormat,则以注解为主进行格式化日期。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss:SSS")
private Date createTime;
含义:@JsonFormat,用于日期格式化
地址:http://127.0.0.1:8080/springboot/getUser
结果:{"id":"1","realName":"Li","password":"123456","phoneNo":"15000000000","createTime":"2020-12-14 09:09:52:840","loginName":"Mr Li"}
5、多种注解配置
@JsonNaming,用于指定一个命名策略,作用于类或者属性上。
@JsonSerialize,指定一个实现类来自定义序列化。
@JsonDeserialize,用户自定义反序列化。
@JsonView,作用在类或者属性上,用来定义一个序列化组(未被定义的,序列化后,就不会显示出来)。
6、项目目录
说明:每一篇文章的项目都是基于前面文章的项目基础上,进行开发的。