SpringBoot - 后端数据返回前端各个数据类型全局格式化

全局配置

java 复制代码
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author Lux Sun
 * @date 2023/8/27
 */
@Configuration
public class MyObjectMapperConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();

        // 设置序列化时忽略为null的字段
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        // 注册自定义的BigDecimalSerializer
        objectMapper.registerModule(new SimpleModule()
                .addSerializer(BigDecimal.class, new BigDecimalSerializerConfig())
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializerConfig()));

        return objectMapper;
    }
}

BigDecimal 数据类型

java 复制代码
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.szqy.common.domain.basic.OpenTime;
import java.io.IOException;
import java.math.BigDecimal;

public class BigDecimalSerializerConfig extends JsonSerializer<BigDecimal> {
    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null) {
            // 设置保留两位小数,并保留末尾的".00"
            Object currentValue = gen.getCurrentValue();
            String formattedValue = value.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
            if (currentValue instanceof OpenTime) {
                // 设置保留两位小数,并去除末尾的".00"
                formattedValue = value.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
            }
            gen.writeString(formattedValue);
        }
    }
}

LocalDateTime 数据类型

java 复制代码
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDateTimeSerializerConfig extends JsonSerializer<LocalDateTime> {

    private final DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public void serialize(LocalDateTime dateTime, JsonGenerator generator, SerializerProvider sp)
            throws IOException {
        String formattedDateTime = dateTime.format(dateTimeFormat);
        generator.writeString(formattedDateTime);
    }
}
相关推荐
一只小阿乐8 分钟前
react 封装弹框组件 传递数据
前端·javascript·react.js
533_31 分钟前
[element-plus] el-tree 动态增加节点,删除节点
前端·javascript·vue.js
禁止摆烂_才浅35 分钟前
前端开发小技巧-【JavaScript】- 获取元素距离 document 顶部的距离
前端·javascript·react.js
wshzd37 分钟前
LLM之Agent(二十九)|LangChain 1.0核心组件介绍
前端·javascript·langchain
程序猿_极客40 分钟前
Vue 2脚手架从入门到实战核心知识点全解析(day6):从工程结构到高级通信(附代码讲解)
前端·javascript·vue.js·vue2学习笔记
q***71851 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
web加加1 小时前
vue3 +vite项目页面防f12,防打开控制台
前端·javascript·vue.js
勇哥java实战分享1 小时前
第一次用 Ollama 跑视觉模型:Qwen2.5-VL 7B 给了我一个意外惊喜
后端
A尘埃2 小时前
大模型应用python+Java后端+Vue前端的整合
java·前端·python
littlepeanut.top2 小时前
C++中将FlatBuffers序列化为JSON
开发语言·c++·json·flatbuffers