SpringBoot学习之应用开发篇(二)1.7 - JSON转换

目录

一、自定义ObjectMapper

1、测试实体类User

2、控制层接口测试方法

3、自定义前后对比

3-1、自定义前

3-2、自定义后

二、Jackson注解

1、@JsonProperty

2、@Jsonlgnore

3、@JsonIgnoreProperties

4、@JsonFormat

5、多种注解配置

6、项目目录


一、自定义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、项目目录

说明:每一篇文章的项目都是基于前面文章的项目基础上,进行开发的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值