Jackson格式化时间

默认的SpringMVC集成Jackson返回的json是时间戳,使用jackson提供的注解可以格式化日期。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date start;         //开始日期
<think>我们之前已经介绍了Jackson的基本使用和示例,现在用户询问的是“jackson 序列化格式”,所以重点在于Jackson在序列化过程中支持的格式以及如何控制序列化的输出格式。 序列化格式涉及多个方面,比如日期格式、空值处理、字段顺序、缩进等。此外,Jackson不仅支持JSON格式,还支持其他数据格式(如XML、YAML等),但用户没有特别指明,我们默认以JSON序列化格式为主,并提及其他格式的支持。 回答结构: 1. 介绍Jackson序列化格式的基本概念,以及如何通过配置和注解控制序列化格式。 2. 提供一些常见格式控制的示例,如日期格式化、空值忽略、字段排序等。 3. 简要提及其他格式(如XML、YAML)的序列化。 注意:用户要求使用中文回答,并在最后提出3-5个相关问题。 由于之前已经使用过代码块,这里我们继续使用代码块展示示例。 最后,按照要求,在回答末尾输出“§§相关问题§§”并列出3-5个相关问题。 </think>### Jackson 序列化格式详解与配置 Jackson 通过 `ObjectMapper` 提供高度灵活的序列化格式控制,以下是核心配置方式和常用格式示例: #### 🔧 核心配置方法 ```java ObjectMapper mapper = new ObjectMapper(); // 1. 美化输出(缩进格式化) mapper.enable(SerializationFeature.INDENT_OUTPUT); // 2. 空值处理 mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略null字段 // 3. 日期格式全局设置 mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 4. 字段排序控制 mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); ``` --- #### 常用序列化格式示例 **1. 基础 JSON 格式** ```java User user = new User("张三", 25); String json = mapper.writeValueAsString(user); // 输出: {"name":"张三","age":25} ``` **2. 美化格式化输出** ```java mapper.enable(SerializationFeature.INDENT_OUTPUT); String prettyJson = mapper.writeValueAsString(user); /* 输出: { "name" : "张三", "age" : 25 } */ ``` **3. 自定义字段格式(注解控制)** ```java public class Product { @JsonProperty("product_name") // 修改字段名 private String name; @JsonFormat(shape = JsonFormat.Shape.STRING) // 数值转字符串 private BigDecimal price; @JsonInclude(Include.NON_EMPTY) // 空集合不显示 private List<String> tags; } ``` **4. 排除字段的三种方式** ```java // 方式1: 注解忽略 @JsonIgnore private String password; // 方式2: 类型混合 mapper.addMixIn(User.class, UserMixIn.class); public abstract class UserMixIn { @JsonIgnore abstract String getPassword(); } // 方式3: 动态过滤 mapper.setFilterProvider(new SimpleFilterProvider() .addFilter("pwdFilter", SimpleBeanPropertyFilter.serializeAllExcept("password"))); ``` --- #### 🌐 支持的其他序列化格式 | **格式** | **依赖** | **启用方式** | |----------|------------------------|----------------------------------| | **XML** | jackson-dataformat-xml | `new XmlMapper()` | | **YAML** | jackson-dataformat-yaml | `new YAMLFactory().createMapper()` | | **CSV** | jackson-dataformat-csv | `new CsvMapper()` | **XML 序列化示例** ```java XmlMapper xmlMapper = new XmlMapper(); String xml = xmlMapper.writeValueAsString(user); // 输出: <User><name>张三</name><age>25</age></User> ``` --- #### ⚠️ 特殊格式处理技巧 1. **枚举序列化为名称/序号** ```java public enum Status { @JsonValue // 序列化为描述文本 ACTIVE("启用"), DISABLED("停用"); private final String desc; } ``` 2. **自定义序列化器** ```java public class PhoneSerializer extends StdSerializer<String> { protected PhoneSerializer() { super(String.class); } @Override public void serialize(String value, JsonGenerator gen, SerializerProvider provider) { gen.writeString(value.substring(0,3) + "****" + value.substring(7)); } } // 应用: @JsonSerialize(using = PhoneSerializer.class) private String phone; ``` > 💡 **性能提示**: > - 使用 `@JsonCreator` 构造函数反序列化提升 40% 性能 > - 禁用 `SerializationFeature.WRITE_DATES_AS_TIMESTAMPS` 避免时间戳格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值