springboot序列化和反序列化怎么定义

什么是序列化和反序列化

序列化是将一个对象的状态信息转换为字节流的过程,而反序列化则是将这个字节流恢复成对象的过程,在Java中,序列化主要用于持久化存储和网络传输,SpringBoot提供了两种序列化方式:JDK自带的序列化和Jackson序列化。

如何在SpringBoot中配置序列化和反序列化?

1、JDK自带序列化

springboot序列化和反序列化怎么定义

在SpringBoot项目中,默认使用的是JDK自带的序列化方式,无需额外配置,只需在需要序列化的类上添加@Serializable注解即可。

import java.io.Serializable;
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
}

2、Jackson序列化

如果需要使用Jackson序列化,首先需要在项目的pom.xml文件中添加Jackson依赖:

springboot序列化和反序列化怎么定义

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

然后在SpringBoot配置类中添加@EnableWebMvc注解,以启用Web MVC功能:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
public class WebConfig {
}

接下来,在需要使用Jackson序列化的类上添加@JsonSerialize@JsonDeserialize注解:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ObjectMapper;
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    // 其他属性和方法省略...
}

创建一个自定义的ObjectMapper类,用于配置Jackson的序列化和反序列化规则:

springboot序列化和反序列化怎么定义

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.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper() {
        SimpleModule module = new SimpleModule();
        module.addSerializer(Date.class, new ToStringSerializer(new SimpleDateFormat("yyyy-MM-dd")));
        module.addDeserializer(Date.class, new StdDeserializer<>(Date.class) {
            @Override
            protected Date _deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
                return parseDate(p);
            }
        });
        registerModule(module);
        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
}

然后在SpringBoot配置类中创建一个CustomObjectMapper的Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans importfactorybean;
import orgswingwwe34534534534534534534534534534534534534534534534534534534534534534534534534534534534534567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234x+y=z"; // 将x替换为实际的时间格式,将y替换为实际的日期格式,将z替换为实际的时区名称,如果不需要特定的格式,可以使用默认格式。

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/111301.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
酷盾叔的头像酷盾叔订阅
上一篇 2023-12-24 02:01
下一篇 2023-12-24 02:03

相关推荐

  • 如何从protobuf中更新数据?

    Protobuf(Protocol Buffers)是一种由Google开发的序列化数据格式,用于将结构化数据高效地转换为字节流,以便在网络传输或存储时使用。更新数据通常涉及反序列化字节流回其原始结构,修改数据,然后重新序列化为新的字节流。,,以下是一个简单的Python示例,展示如何使用protobuf库来更新数据:,,“python,import example_pb2 # 假设example.proto已经编译为example_pb2.py,,# 创建一个消息实例,message = example_pb2.MyMessage(),message.field1 = “old value”,message.field2 = 42,,# 序列化消息,serialized_data = message.SerializeToString(),,# 反序列化并更新数据,new_message = example_pb2.MyMessage(),new_message.ParseFromString(serialized_data),new_message.field1 = “new value” # 更新字段值,,# 再次序列化以查看更新后的数据,updated_data = new_message.SerializeToString(),print(updated_data),`,,在这个例子中,我们首先创建了一个MyMessage的实例,设置了它的一些字段,然后将它序列化为字节流。我们将这个字节流反序列化回一个新的MyMessage`实例,并更新了其中一个字段的值。我们将更新后的实例再次序列化,得到包含新数据的字节流。

    2024-12-05
    05
  • 如何在Android中具体使用protobuf?

    在Android中使用protobuf,首先需要定义.proto文件,然后使用protoc工具生成Java类。接着在项目中引入protobuf库,通过生成的类进行数据的序列化和反序列化操作。

    2024-11-01
    0263
  • 在MapReduce中,如何实现数据的序列化和反序列化?

    MapReduce中的数据序列化是将数据结构或对象状态转换为可存储或传输的格式的过程,以便在Map和Reduce阶段之间高效地传递数据。

    2024-10-17
    010
  • 如何利用MapReduce中的序列化功能来操作用户数据?

    MapReduce 序列化用于将数据转换为可传输的格式,以便在分布式计算中高效地操作用户数据。

    2024-10-16
    014

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入