spring-configuration-metadata.json 配置问题

ConfigurationProperties修饰的配置类A,A中有个List<B>的成员变量b,类B有两个枚举类型的的成员变量如 c d,如何通过spring-configuration-metadata.json把这个关系配置出来实现在编写application.yml的时候可以提示出类B中两个枚举类的值。类的关系大概如下:

class A{
  List\<B\> b;
}
class B{
     EnumC c;
     List\<EnumD\> d;
}

枚举:



import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author suke
 */

@Getter
@AllArgsConstructor
@SuppressWarnings("all")
public enum TestEnum {

    A_a(1,"a"),
    B_b(2,"b"),

    ;

    private Integer code;
    private String message;
}

配置

@Data
@Component
@ConfigurationProperties(prefix = "suke.config")
public class CuConfig {

    /**
     * 上传路径
     */
    private String uploadPath;

    /**
     * 最大文件限制(MB)
     */
    private Long maxSize;


    /**
     * 可动态修改日志配置
     */
    private List<String> dynamicLogConfigPath;


    private List<TestEnum> testEnums;
}

yaml

1 Like

你好,我遇到的问题是 枚举所在的类 是一个List,即已你举的例子来说, CuConfig 类在su类中需要是作为一个List成员变量的存在,

不太现实,本身一层变量是固定名称,第二层级是可以自动提示的,但是你的是第二层及不确定,要第三层及自动提示,这就好比隔代预测了,在idea不知道你的第二层是会出现什么名字的变量,做不到提示。

如果你找到解决方案了,可以在这里分享下。

可能误解我的意思了,你看下我的类大概说明,A类是一个配置类,便携meta json文件时,property节点编写集合 b的时候是没问题的 ,但是如何编写 类B 中 c d两个属性,实现在yml中配置集合b的时候可以提出来c d

再直白一点,就是你例子中 suke下的config 是一个数组

我说的没问题的 ,首先:你的A是配置类,你的A下的变量B,是另一个类,B下的是枚举,然后你想B下面的枚举自动提示;

  • 那么问题来了,你的变量A下的B的值是可变的,这个是没有预期的,自然idea就没法识别
  • 加入你的A下集合中的值是固定的,那么这玩意是个动态list,想填什么就是什么的,所以不太现实
  • 回到最本身,你的第二层级是不确定的,idea是没法预测你在A下面的list中变量的名称是

你提到的:你的变量A下的B的值是可变的,指的是的B的个数是可变的是吗,我理解由于B是一个数组,个数可变,但是B类下边的两个枚举变量还是固定的。yml中我按照如下写法
test:
b:
- c:c1
d: d1,d2,d3
- c:c2
d: d1,d2,d3
- c:c3
d: d1,d2,d3
再一个bean中注入A类,这些内容是可以正常设置到A类中的,也就是针对使用是没问题的,只是yml中不能正常解析 如上格式,我个人觉得是目前idea针对这种结构不支持

个数没关系,是内容可变,集合中的值是不确定的,不是人家idea的问题,是集合中的值这玩意本身不可预测