Spring Boot 配置 Jackson

发布时间 2023-10-14 15:56:31作者: 深码青年

image

什么是 Jackson ? 有什么作用?

Jackson 是 Spring Boot 内置的 Json 解析框架,用来完成出入参的序列化和反序列化。通常,我们会在 Controller 类中方法上,加上 @RequestBody 或者 @ResponseBody 注解,Spring Boot 会自动对出入参做 Json 解析与转换工作。

注意:@RequestBody用于将入参 Json 转换成对象,而 @ResponseBody 用于将对象转换成 Json 返回。

已经内置,为何还需要配置?

内置的 Jackson 无法满足生产所需,比如说对自定义日期格式,亦或者我们想适配 Java 8 新加入的 LocalDateLocalDateTime 等。

下面以自定义日期格式转换为例,定义一个 /user 接口:

package site.exception.springbootjackson.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import site.exception.springbootjackson.entity.User;

/**
 * @time 21:03
 * @discription
 **/
@RestController
public class UserController {

    /**
     * 定义一个创建用户的接口
     * @param user
     * @return
     */
    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        System.out.println(user.getCreateTime().toString());
        // 将 user 再以 Json 的形式返回
        return user;
    }
}

User.java:

package site.exception.springbootjackson.entity;

import java.io.Serializable;
import java.util.Date;

/**
 * @time 21:00
 * @discription
 **/
@Data
public class User implements Serializable {
    /**
     * 用户名
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 创建时间
     */
    private Date createTime;

}

上面这个接口我们直接使用的 @RestController, 它会将此 Controller 中的方法均以 Json 的格式进行返回。完成这一切以后,启动项目,并通过 Postman 访问该接口,测试一下 Json 格式提交能否进行正常转换:

image

很不幸,报错了!接下来,我们需要自定义格式转换。

配置 Jackson

定义一个 JacksonConfig 配置类:

package site.exception.springbootjackson.config;

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

import java.text.SimpleDateFormat;

/**
 * @time 19:32
 * @discription
 **/
@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 自定义日期转换格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        return objectMapper;
    }
}

重新启动项目,再次对该接口访问:
image