首页 > 其他分享 >扩展springboot的json数据返回使用的json序列化方式

扩展springboot的json数据返回使用的json序列化方式

时间:2023-01-27 16:23:12浏览次数:40  
标签:jackson springboot json import 序列化 com class fasterxml

扩展springboot的json数据返回使用的json序列化方式

  • 可以指定时间类型json化后的返回样式
  • 可以指定特殊功能定义,Long类型转成字符串形式返回

自定义序列化转换器,代码范例

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;

public class JacksonObjectMapper extends ObjectMapper {
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))

                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                .addSerializer(Long.class, ToStringSerializer.instance) // 特殊指定long类型json转换的时候转成字符串形式,防止前端long类型数据精度丢失

                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

返回json的时候,让消息转换器生效

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射");
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
    }

    /**
     * 扩展mvc框架的消息转换器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器");
        /**
         * 创建消息转换器对象,将controller返回的对象转成json
         */
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 设置对象转换器,底层使用JackSon将java转成json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 将上面的消息转换器追加到MVC框架转换器集合中
        converters.add(0,messageConverter);
        super.extendMessageConverters(converters);
    }
}

标签:jackson,springboot,json,import,序列化,com,class,fasterxml
From: https://www.cnblogs.com/PythonOrg/p/17068977.html

相关文章

  • 用 Vue.js 实现一个 JSON Viewer
    演示地址:http://json.imlht.com/vue-json-viewer-demo.html常用的JSON格式化工具JSON是一种轻量级的数据交换格式,相信大家用得比较多,平时也用了很多格式化工具......
  • 使用XMLEncoder和XMLDecoder对xml进行序列化和反序列化
    publicclassAAA{privateStringa;privateStringb;publicStringgetA(){returna;}publicvoidsetA(Stringa)......
  • Java基于springboot大学生宿舍寝室考勤人脸识别管理系统
    简介Java基于springboot开发的大学生寝室管理系统宿舍管理系统。学生可以查找寝室和室友信息,可以申请换寝室,申请维修,寝室长提交考勤信息(宿管确认学生考勤信息),补签,查看寝室......
  • 230126_50_SpringBoot入门
    4.首页实现自定义配置packagecom.bill.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.an......
  • 实战-mongodb副本集搭建以及整合springboot使用
    一mongodb介绍MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 Nosql技术门类redis内存型mongodb......
  • [Linux理论基础1]----手写和使用json完成[序列化和反序列化]
    文章目录​​前言​​​​一、应用层​​​​二、再谈"协议"​​​​三、网络版计算器​​​​手写版本​​​​使用第三方库json实现​​​​完整代码​​​​总结​​前......
  • package.json中的type字段含义,及commonjs与ES6的区别
     package.json中的type字段含义如果最近的package.json文件包含一个顶级字段“type”,其值为“module”,则以.js结尾或没有任何扩展名的文件将作为ES模块进行加载。 如......
  • SpringBoot 定时任务
    示例#ScheduledTaskService.javapackagecom.ln.myboot3.schedule;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.ster......
  • SpringBoot 定时任务示例
    示例#ScheduledTaskService.javapackagecom.ln.myboot3.schedule;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.ster......
  • 230125_50_SpringBoot入门
    SpringBoot实战:员工管理系统1.静态资源导入可以从百度网盘获取资源:链接:https://pan.baidu.com/s/1x-6U_NCNEhIXOq0CcvRW-g提取码:mg94复制这段内容后打开百度......