You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Properties转YAML出现大量null项的原因及解决办法

Spring Gateway Properties转YAML出现大量null项问题解决

问题重现

我有部分Java Properties格式的Spring Gateway路由配置:

spring.cloud.gateway.routes[9].id = dict-auth
spring.cloud.gateway.routes[9].order = 0
spring.cloud.gateway.routes[9].predicates[0] = Path=/dict/user/plugin/login
spring.cloud.gateway.routes[9].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[10].filters[0] = RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
spring.cloud.gateway.routes[10].id = dict-access-token-refresh
spring.cloud.gateway.routes[10].order = 1
spring.cloud.gateway.routes[10].predicates[0] = Path=/dict/auth/access_token/refresh
spring.cloud.gateway.routes[10].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[11].filters[0] = RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
spring.cloud.gateway.routes[11].id = dict-refresh-token-refresh
spring.cloud.gateway.routes[11].order = 2
spring.cloud.gateway.routes[11].predicates[0] = Path=/dict/auth/refresh_token/refresh
spring.cloud.gateway.routes[11].uri = http://10.98.176.2:11014

转换成YAML后出现大量null项:

spring:
  cloud:
    gateway:
      routes:
      - null
      - null
      - null
      - null
      - null
      - null
      - null
      - null
      - null
      - id: dict-auth
        order: 0
        predicates:
        - Path=/dict/user/plugin/login
        uri: http://10.98.176.2:11014
      - null
      - filters:
        - RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
        id: dict-access-token-refresh
        order: 1
        predicates:
        - Path=/dict/auth/access_token/refresh
        uri: http://10.98.176.2:11014
      - filters:
        - RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
        id: dict-refresh-token-refresh
        order: 2
        predicates:
        - Path=/dict/auth/refresh_token/refresh
        uri: http://10.98.176.2:11014

完整的Properties路由配置如下:

spring.cloud.gateway.routes[0].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[0].id = time-capsule-service
spring.cloud.gateway.routes[0].order = 2
spring.cloud.gateway.routes[0].predicates[0] = Path=/tik/**
spring.cloud.gateway.routes[0].uri = http://10.111.149.10:11015
spring.cloud.gateway.routes[1].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[1].id = fortune-service
spring.cloud.gateway.routes[1].order = 2
spring.cloud.gateway.routes[1].predicates[0] = Path=/fortune/**
spring.cloud.gateway.routes[1].uri = http://10.96.112.198:11015
spring.cloud.gateway.routes[2].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[2].id = dolphin-music-service
spring.cloud.gateway.routes[2].predicates[0] = Path=/music/**
spring.cloud.gateway.routes[2].uri = http://10.107.64.246:11014
spring.cloud.gateway.routes[3].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[3].id = dolphin-post-service
spring.cloud.gateway.routes[3].predicates[0] = Path=/post/**
spring.cloud.gateway.routes[3].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[4].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[4].id = dolphin-manage-service
spring.cloud.gateway.routes[4].order = 2
spring.cloud.gateway.routes[4].predicates[0] = Path=/manage/**
spring.cloud.gateway.routes[4].uri = http://10.106.240.158:11015
spring.cloud.gateway.routes[5].id = dolphin-login-service
spring.cloud.gateway.routes[5].order = 0
spring.cloud.gateway.routes[5].predicates[0] = Path=/manage/admin/user/login,/fortune/user/login,/fortune/user/sms,/fortune/user/reg/verify,/fortune/user/guest/login,/dict/user/login
spring.cloud.gateway.routes[5].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[6].id = dolphin-logout-service
spring.cloud.gateway.routes[6].order = 0
spring.cloud.gateway.routes[6].predicates[0] = Path=/manage/admin/user/logout
spring.cloud.gateway.routes[6].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[7].id = dolphin-login-current-admin-user
spring.cloud.gateway.routes[7].order = 0
spring.cloud.gateway.routes[7].predicates[0] = Path=/manage/admin/user/current-user
spring.cloud.gateway.routes[7].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[8].filters[0].name = JwtAuthentication
spring.cloud.gateway.routes[8].id = dolphin-dict-service
spring.cloud.gateway.routes[8].order = 3
spring.cloud.gateway.routes[8].predicates[0] = Path=/dict/**
spring.cloud.gateway.routes[8].uri = http://10.97.100.34:11014
spring.cloud.gateway.routes[9].id = dict-auth
spring.cloud.gateway.routes[9].order = 0
spring.cloud.gateway.routes[9].predicates[0] = Path=/dict/user/plugin/login
spring.cloud.gateway.routes[9].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[10].filters[0] = RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
spring.cloud.gateway.routes[10].id = dict-access-token-refresh
spring.cloud.gateway.routes[10].order = 1
spring.cloud.gateway.routes[10].predicates[0] = Path=/dict/auth/access_token/refresh
spring.cloud.gateway.routes[10].uri = http://10.98.176.2:11014
spring.cloud.gateway.routes[11].filters[0] = RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
spring.cloud.gateway.routes[11].id = dict-refresh-token-refresh
spring.cloud.gateway.routes[11].order = 2
spring.cloud.gateway.routes[11].predicates[0] = Path=/dict/auth/refresh_token/refresh
spring.cloud.gateway.routes[11].uri = http://10.98.176.2:11014

原因分析

这不是配置遗漏,是转换工具的特性导致的:Properties格式中routes[9]表示数组的第10个元素(索引从0开始),转换工具会严格按照索引位置生成YAML数组,前面0-8的位置没有配置数据,就会自动填充null来占位,最终出现大量null项。

解决方案

1. 使用完整的Properties配置转换

你之前只截取了routes[9]-[11]的片段转换,导致工具补全前面的null。如果用提供的完整Properties配置(包含routes[0]-[11])进行转换,工具会生成完整的路由数组,不会出现null项。

2. 手动清理YAML中的null项

如果已经转换了片段配置,直接删除YAML中所有- null的行即可。Spring Gateway加载时会忽略这些无效的null项,正常识别有效的路由配置。清理后的YAML示例:

spring:
  cloud:
    gateway:
      routes:
      - id: dict-auth
        order: 0
        predicates:
        - Path=/dict/user/plugin/login
        uri: http://10.98.176.2:11014
      - filters:
        - RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
        id: dict-access-token-refresh
        order: 1
        predicates:
        - Path=/dict/auth/access_token/refresh
        uri: http://10.98.176.2:11014
      - filters:
        - RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
        id: dict-refresh-token-refresh
        order: 2
        predicates:
        - Path=/dict/auth/refresh_token/refresh
        uri: http://10.98.176.2:11014

3. 手动编写标准YAML格式配置

直接把完整的Properties转换成YAML,避免依赖转换工具。完整的转换后YAML如下:

spring:
  cloud:
    gateway:
      routes:
      - filters:
        - name: JwtAuthentication
        id: time-capsule-service
        order: 2
        predicates:
        - Path=/tik/**
        uri: http://10.111.149.10:11015
      - filters:
        - name: JwtAuthentication
        id: fortune-service
        order: 2
        predicates:
        - Path=/fortune/**
        uri: http://10.96.112.198:11015
      - filters:
        - name: JwtAuthentication
        id: dolphin-music-service
        predicates:
        - Path=/music/**
        uri: http://10.107.64.246:11014
      - filters:
        - name: JwtAuthentication
        id: dolphin-post-service
        predicates:
        - Path=/post/**
        uri: http://10.98.176.2:11014
      - filters:
        - name: JwtAuthentication
        id: dolphin-manage-service
        order: 2
        predicates:
        - Path=/manage/**
        uri: http://10.106.240.158:11015
      - id: dolphin-login-service
        order: 0
        predicates:
        - Path=/manage/admin/user/login,/fortune/user/login,/fortune/user/sms,/fortune/user/reg/verify,/fortune/user/guest/login,/dict/user/login
        uri: http://10.98.176.2:11014
      - id: dolphin-logout-service
        order: 0
        predicates:
        - Path=/manage/admin/user/logout
        uri: http://10.98.176.2:11014
      - id: dolphin-login-current-admin-user
        order: 0
        predicates:
        - Path=/manage/admin/user/current-user
        uri: http://10.98.176.2:11014
      - filters:
        - name: JwtAuthentication
        id: dolphin-dict-service
        order: 3
        predicates:
        - Path=/dict/**
        uri: http://10.97.100.34:11014
      - id: dict-auth
        order: 0
        predicates:
        - Path=/dict/user/plugin/login
        uri: http://10.98.176.2:11014
      - filters:
        - RewritePath=/dict/auth/access_token/refresh, /post/auth/access_token/refresh
        id: dict-access-token-refresh
        order: 1
        predicates:
        - Path=/dict/auth/access_token/refresh
        uri: http://10.98.176.2:11014
      - filters:
        - RewritePath=/dict/auth/refresh_token/refresh, /post/auth/refresh_token/refresh
        id: dict-refresh-token-refresh
        order: 2
        predicates:
        - Path=/dict/auth/refresh_token/refresh
        uri: http://10.98.176.2:11014

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:37:08