小程序开发-服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2.9 KiB

应用启动问题修复

🔍 问题分析

错误信息

Failed to bind properties under 'spring.jackson.mapper' to java.util.Map<com.fasterxml.jackson.databind.MapperFeature, java.lang.Boolean>

问题原因

application.yml 中的 Jackson 配置格式不正确,特别是 mapper.default-property-inclusion 配置项导致启动失败。

🔧 修复方案

1. 简化application.yml配置

修复前:

jackson:
  time-zone: GMT+8
  date-format: yyyy-MM-dd HH:mm:ss
  serialization:
    write-dates-as-timestamps: false
  deserialization:
    fail-on-unknown-properties: false
  mapper:
    default-property-inclusion: non_null  # 这行配置有问题

修复后:

jackson:
  time-zone: GMT+8
  date-format: yyyy-MM-dd HH:mm:ss
  serialization:
    write-dates-as-timestamps: false

2. 简化JacksonConfig.java

移除了不必要的导入和复杂配置,只保留核心的 JavaTimeModule 注册。

📁 修改的文件

修改文件

  1. application.yml - 简化Jackson配置
  2. JacksonConfig.java - 移除不必要的导入

🎯 修复策略

核心思路

  1. 最小化配置:只保留必要的配置项
  2. 依赖@JsonFormat注解:主要依靠实体类上的注解来控制序列化
  3. 避免配置冲突:简化全局配置,避免与Spring Boot自动配置冲突

为什么这样修复?

  1. @JsonFormat注解已经足够:我们已经为154个实体类添加了注解
  2. 全局配置容易冲突:复杂的全局配置容易与Spring Boot版本产生冲突
  3. 简单可靠:最简配置 + 字段级注解 = 最可靠的方案

🚀 重启测试

1. 重新启动应用程序

现在应用程序应该能正常启动。

2. 验证配置

启动成功后,检查以下内容:

  • 应用程序正常启动,无错误日志
  • Jackson配置生效
  • JavaTimeModule正确注册

3. 测试接口

# 测试原问题接口
curl http://127.0.0.1:9200/api/cms/cms-website/getSiteInfo

# 测试时间序列化
curl http://127.0.0.1:9200/api/test/datetime

预期结果

启动成功

应用程序应该能正常启动,不再出现Jackson配置错误。

时间序列化正常

所有LocalDateTime字段都应该能正确序列化为 "yyyy-MM-dd HH:mm:ss" 格式。

🎯 解决方案优势

1. 配置简单

  • 最小化的全局配置
  • 避免复杂的配置项
  • 减少版本兼容性问题

2. 依赖注解

  • 主要依靠@JsonFormat注解
  • 字段级控制更精确
  • 不受全局配置影响

3. 稳定可靠

  • 不依赖复杂的全局配置
  • 每个字段都有明确的格式定义
  • 向后兼容性好

📝 总结

通过简化配置和依赖字段级注解的方式,我们解决了:

  1. 启动问题:移除了有问题的配置项
  2. 序列化问题:通过@JsonFormat注解确保正确序列化
  3. 稳定性:使用最简单可靠的配置方案

现在重启应用程序应该能正常工作!