SoFunction
Updated on 2025-04-05

How to solve the problem of @value not getting yaml array

1. Configuration in yaml

as follows:

andawell:
  permission:
    allPermissionSign: [["Airline Company","Military Product Sales Center"],["Civil Aviation Division","Civil Aviation Sales Center"],["Airline Company","Military Product Sales Center"],["Airline Company","Military Product Sales Center"]]
    orgName: 
     - Aviation company
     - Civil Aviation Department
     - Aviation company
     - Aviation company
    activeOrg: 1

2. Obtain

1. Integers can be obtained normally using @Value:

    @Value("${}")
    int permissionActiveOrg;
  1. When getting array/list using @Value, it cannot be retrieved normally:
    @Value("${}")
    List<List<string>>  allPermissionSign;

3. Solution

Solution 1

For non-necked lists: for example: swl :[a,b,c,d],

Need to change to: swl: a, b, c, d;

@Value(“${swl}”)or@Value("#{'${swl}'.split(',')}")

Solution 2

For complex configurations such as nested lists:

allPermissionSign: [["Airline Company","Military Product Sales Center"],["Civil Aviation Division","Civil Aviation Sales Center"],
["Airline Company","Military Product Sales Center"],["Airline Company","Military Product Sales Center"]]

use

@ConfigurationProperties(prefix = "")

Get:

@Component
@Data
@ConfigurationProperties(prefix = "")
public class DataSyncConfig {

    /**
      * The center names with all permissions in each organization are the departments with all permissions under [Aviation Settings, Civil Aviation, Intelligence, Information]
      */
    List&lt;List&lt;String&gt;&gt; allPermissionSign;

    /**
      * The full name of each organization is [Aviation Settings, Civil Aviation, Intelligence, Information] in turn
      */
    List&lt;String&gt; orgName;

    /**
      * Effective organization, [1 aviation installation, 2 civil aviation, 3 intelligence, 4 information]
      */
    Integer activeOrg;
}

Summarize

The above is personal experience. I hope you can give you a reference and I hope you can support me more.