首页 > 其他分享 >springboot 控制序列化反序列化示例(接口返回数据处理/接口接收数据处理)

springboot 控制序列化反序列化示例(接口返回数据处理/接口接收数据处理)

时间:2023-11-20 11:13:31浏览次数:29  
标签:jackson java 接口 数据处理 import 序列化 com public

1.返回Long转JSON

package com.mingx.drone.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * @Description: JavaScript无法精确地表示大于Number.MAX_SAFE_INTEGER(即9007199254740991)的整数
 * 返回的数值过大转换为字符串
 * @Author: gch
 * @Date: 2023/9/7 16:39
 */
public class IdLongSerializer extends JsonSerializer<Long> {
    @Override
    public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value > 900000000000000L) {
            gen.writeString(value.toString());
        } else {
            gen.writeNumber(value);
        }
    }
}
@Bean
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
//        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        SimpleModule module = new SimpleModule();
        module.addSerializer(Long.class, new IdLongSerializer());
        module.addSerializer(Long.TYPE, new IdLongSerializer());
        objectMapper.registerModule(module);
        return objectMapper;
    }

 

配置文件中设置日期格式可以解决日期序列化问题

spring:
  jackson:
    #  格式化返回时间 yyyy-MM-dd HH:mm:ss
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

不同的情况可以直接在属性上使用注解 优先级高于上述配置文件中配置

@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

 

接收date数据反序列化问题

添加配置文件如下(Date属性测试没问题 DateTime类型没有测试)

package com.mingx.drone.config;

import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;

@JsonComponent
public class DateFormatConfig {

    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;

    /**
     * @author xiaofu
     * @description date 类型全局时间格式化
     * @date 2020/8/31 18:22
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() {

        return builder -> {
            TimeZone tz = TimeZone.getTimeZone("UTC");
            DateFormat df = new SimpleDateFormat(pattern);
            df.setTimeZone(tz);
            builder.failOnEmptyBeans(false)
                    .failOnUnknownProperties(false)
                    .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                    .dateFormat(df);
        };
    }

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)));
    }
}

 

标签:jackson,java,接口,数据处理,import,序列化,com,public
From: https://www.cnblogs.com/guanxiaohe/p/17843478.html

相关文章

  • 项目正式——数据访问接口模块
    数据访问接口模块现在的要求在URL输入数据访问接口-HTTP协议的本质http基础知识写一个普通的server程序用来接受浏览器的请求报文以便于分析模拟请求报文的发送注意这里网页的内容比较多,调用一次智能读取到一部分的数据,输出到文件保存起来还能抓......
  • Java基础知识回顾5-序列化和反序列化
    一、概念Java序列化是指把Java对象转换为字节序列的过程。Java反序列化是指把字节序列恢复为Java对象的过程。序列化作用:在传递和保存对象时,保存对象的完整性和可传递性,对象转换为字节流,可以站网络上传输或者保存在本地文件中。反序列化作用:根据字节流中保存的对象状态及描述信息......
  • java反序列化----CC7利用链学习笔记(Hashtable)
    目录java反序列化----CC7利用链学习笔记(Hashtable)环境搭建利用链java反序列化----CC7利用链学习笔记(Hashtable)环境搭建jdk8u71<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId>......
  • 接口设计
    如何把一个接口设计好? 如何设计一个接口?是在我们日常开发或者面试时经常问及的一个话题。很多人觉得这不就是CRUD,能实现不就行了。单纯实现来说,并非难事,但要做到易用、易扩展、易维护并不是一件简单的事。这里并不强调一些个接口设计的原则或者设计方法,仅从如何设计一个好的......
  • 使用MediaDevices接口实现录屏技术
    摘要:本文将介绍如何使用JavaScript的MediaDevices接口实现录屏功能。我们将通过WebRTC技术捕获用户的屏幕或摄像头画面,并将其编码为MP4视频文件。在线录屏是指在互联网上进行屏幕录制的过程。它允许用户通过网络连接,将自己的屏幕活动记录下来,并可以在需要时进行播放、共享或存档......
  • go接口判断是否为nil
    variinterface{}varx*inti=x//不赋值时i接口为isanil,反射reflect.ValueOf(i).IsNil()会panilifi!=nil{fmt.Println("i!=nil")}else{fmt.Println("isanil")}ifreflect.ValueOf(i).IsNil(){fmt.Print......
  • 掌握迭代器:Python中的强大工具,让你轻松驾驭数据处理的巨轮
    今天,我们将深入探讨Python中的迭代器。迭代器是一种强大的工具,它使我们能够在不需要知道数据集的全部信息的情况下,逐个访问数据集中的每个元素。通过使用迭代器,我们可以逐个处理数据集中的每个元素,而不需要一次性加载整个数据集到内存中。这使得迭代器在处理大型数据集时特别有用。......
  • 【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解
    本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计RESTAPI,通过使用Django来实现一个RESTAPI为例,明确后端开发RESTAPI要做的最核心工作,然后介绍DjangoRESTframework能帮助我们简化开发RESTAPI的工作。全套DRF笔记直接地址:请移步这里共5章,24子模块,总计1......
  • java反序列化----CC6利用链学习笔记(HashMap和HashSet)
    目录java反序列化----CC6利用链学习笔记环境配置利用链java反序列化----CC6利用链学习笔记环境配置jdk8(无版本要求)pom.xml中写入<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId>......
  • [CTF/Web] PHP 反序列化学习笔记
    Serialize&unserialize这两个方法为PHP中的方法,参见serialize和unserialize的官方文档.以下内容中可能存在字段,属性,成员三个名词误用/混用,但基本都表示属性文章仍在完善之中,SESSION反序列化漏洞要学废了入门我们先看看方法的序列化之后的字符串的......