Maison > Java > Charger la liste des objets de l'application yml Java Spring Boot

Charger la liste des objets de l'application yml Java Spring Boot

WBOY
Libérer: 2024-02-22 13:16:05
avant
1129 Les gens l'ont consulté

L'éditeur PHP Xigua vous amènera à approfondir la question du chargement des listes d'objets dans l'application yml en Java. Dans Java Spring Boot, en configurant correctement le fichier yml, vous pouvez charger la liste d'objets et l'appliquer de manière flexible dans l'application. Ensuite, maîtrisons ensemble cette technique pour améliorer la praticité et l'efficacité du développement de Spring Boot.

Contenu de la question

J'ai cette classe de configuration :

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

    private list<housetemplate> templates;

    // getters and setters
}
Copier après la connexion

classe de modèle de maison :

public class housetemplate{

    private string id;
    private string description;

    // getters and setters
}
Copier après la connexion

Voici mon application-test.yml

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


examplestring: hello
Copier après la connexion

Dans ma classe de test, j'ai les éléments suivants :

@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();
    }
}
Copier après la connexion

Le premier test pour examplestring réussit, mais le deuxième test échoue. Pourquoi ne puis-je pas mapper yml dans la liste des modèles maison ?

Modifier

<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>
Copier après la connexion

Je sais qu'ils sont vraiment vieux et j'aimerais les mettre à niveau, mais je ne peux pas... c'est à cela que je dois faire face.

Solution

Utilisez @configurationproperties从yml中读取后,可以将其注册为bean,然后可以通过applicationcontext pour l'obtenir.

@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");
    }
}
Copier après la connexion

Si vous ne souhaitez pas vous inscrire en tant que bean, vous pouvez également déclarer la variable comme statique.

Voici un exemple.

@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();
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal