Jackson使用

111 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情

1.新增vo包并且创建imoocker类

image.png

package com.imooc.springboot.study.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Imoocer {
    private String name;
    private int age;
    private String address;
    @JsonProperty("rt")
//    @JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss")
    private Date registerTime;

}

代码说明:

  • @Data:getter和setter方法
  • @NoArgsConstructor:无参构造方法
  • @AllArgsConstructor:
  • @JsonProperty("rt"):字段取别名
  • @JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss"):设置时间格式

它是lombok中的注解,作用在类上; 使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数 对应的 @NoArgsConstructor 是添加一个无参数的构造器,一般使用@Builder注解时同时会使用 @AllArgsConstructor和@NoArgsConstructor

Lombok 插件中的@Builer,可以放在类、构造函数或方法上,它可以帮我们快速实现一个builder模式,builder模式既解决了重叠构造器容易出错,也解决了Javabean的不一致问题

2.新增jacksonConfig配置类

image.png

package com.imooc.springboot.study.config;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper getObjectMapper(){
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"));
        return mapper;
    }
}

代码说明:

  • @Configuration:声明为配置类
  • mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL):非null的才返回
  • mapper.setDateFormat(new SimpleDateFormat("yyyy-mm-dd HH:mm:ss")):设置日期格式

3.控制器引入ObjectMapper

image.png

@GetMapping("jackson")
public Imoocer jackson() throws Exception{
    Imoocer imoocer = Imoocer.builder()
            .name("xiaoming")
            .age(100)
            .registerTime(new Date())
            .build();
    String imoocJson = mapper.writeValueAsString(imoocer);
    log.info("imooc json:{}",imoocJson);
    return mapper.readValue(imoocJson,Imoocer.class);
}

代码说明:

  • Imoocer imoocer = Imoocer.builder():设置Imoocer属性
  • String imoocJson = mapper.writeValueAsString(imoocer):转换为json对象
  • mapper.readValue(imoocJson,Imoocer.class):转换为Object

4.重启服务

image.png image.png