Rumah  >  Artikel  >  Muatkan senarai objek daripada aplikasi yml Java Spring Boot

Muatkan senarai objek daripada aplikasi yml Java Spring Boot

WBOY
WBOYke hadapan
2024-02-22 13:16:051085semak imbas

Editor PHP Xigua akan membawa anda menyelidiki isu cara memuatkan senarai objek dalam yml aplikasi dalam Java. Dalam Java Spring Boot, dengan mengkonfigurasi fail yml dengan betul, anda boleh memuatkan senarai objek dan menggunakannya secara fleksibel dalam aplikasi. Seterusnya, marilah kita menguasai teknik ini bersama-sama untuk meningkatkan kepraktisan dan kecekapan dalam pembangunan Spring Boot.

Kandungan soalan

Saya mempunyai kelas konfigurasi ini:

@configuration
@configurationproperties(prefix = "house")
public class projectconfig{

    private list<housetemplate> templates;

    // getters and setters
}

kelas housetemplate:

public class housetemplate{

    private string id;
    private string description;

    // getters and setters
}

Ini adalah ujian permohonan saya.yml

house:
  templates:
    -
      id: "colonial"
      description: "colonial house template"
    -
      id: "cottage"
      description: "cottage house template"
    -
      id: "apartment"
      description: "apartment house template"


examplestring: hello

Dalam kelas ujian saya, saya mempunyai perkara berikut:

@runwith(springrunner.class)
@enableconfigurationproperties(value = projectconfig.class)
@testpropertysource("classpath:application-test.yml")
public class yamlapplicationcontextloadingspec {

    @value("${examplestring}")
    string example;

    @autowired
    projectconfig projectconfig;


    @test
    public void exampleshouldcontainhello(){
        assertthat(example).isequaltoignoringcase("hello");
    }
   
    @test
    public void appcontextcontainshousetemplates(){
        list<housetemplate> housetemplates = projectconfig.gettemplates();
        assertthat(housetemplates).isnotnull();
    }
}

Ujian pertama untuk examplestring lulus, tetapi ujian kedua tidak. Mengapa saya tidak boleh memetakan yml ke dalam senarai templat rumah?

Edit

<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>

<artifactId>spring-boot</artifactId>
<version>1.5.1.RELEASE</version>

<artifactId>junit</artifactId>
<version>4.12</version>

Saya tahu mereka benar-benar sudah tua dan saya ingin menaik taraf tetapi saya tidak boleh...ini yang perlu saya hadapi.

Penyelesaian

Gunakan @configurationproperties从yml中读取后,可以将其注册为bean,然后可以通过applicationcontext untuk mendapatkannya.

@configuration
@configurationproperties(prefix = "house")
public class testconfig {

    private list<housetemplate> templates;

    @bean
    public list<housetemplate> templates() {
        return templates;
    }

    // getter and setter
}

@restcontroller
@requestmapping("/api/test")
public class testcontroller {

    @autowired
    private applicationcontext applicationcontext;

    @getmapping("get")
    @suppresswarnings("unchecked")
    public list<housetemplate> get() {
        return (list<housetemplate>) applicationcontext.getbean("templates");
    }
}

Jika anda tidak mahu mendaftar sebagai kacang, anda juga boleh mengisytiharkan pembolehubah sebagai statik.

Berikut adalah contohnya.

@Configuration
@ConfigurationProperties(prefix = "House")
public class TestConfig {

    private static List<HouseTemplate> templates;

    public static List<HouseTemplate> get() {
        return templates;
    }

    public List<HouseTemplate> getTemplates() {
        return templates;
    }

    public void setTemplates(List<HouseTemplate> templates) {
        TestConfig.templates = templates;
    }
}

@RestController
@RequestMapping("/api/test")
public class TestController {

    @GetMapping("get")
    public List<HouseTemplate> get() {
        return TestConfig.get();
    }
}

Atas ialah kandungan terperinci Muatkan senarai objek daripada aplikasi yml Java Spring Boot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam