es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Boot Kotlin – Inyectando un mapa desde un archivo YAML

test.yml (ubicación: resources/properties/)

edit:
  field1: test
  field2: test
  field3: test
  field4: test

PropertyConfig.kt

@Configuration
@PropertySource("classpath:properties/test.yml")
class PropertyConfig {
    @Bean
    @ConfigurationProperties(prefix = "edit")
    fun testProperty() = mutableMapOf<string, string="">()
}
@Service
class EditService(
    private val testProperty: Map<string, string="">
) {
    fun print() {
        println(testProperty) // vacío
    }
}

Deseo recibir los valores debajo de “edit” como un mapa.

He probado opciones para @ConfigurationProperties con prefijo y valor, pero no funciona.

Si uso un archivo de propiedades, funciona bien, pero no con un archivo yaml.

¿Qué me falta? Gracias.

kotlinVersion = ‘1.6’; springBootVersion = ‘2.6.1’</string,></string,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar con la asignación de propiedades del archivo YAML al bean testProperty en PropertyConfig.kt.

    En lugar de usar mutableMapOf<string, string="">(), intenta usar MutableMap<string, string="">(). Además, intenta agregar la anotación @ConstructorBinding a PropertyConfig y pasar testProperty como parámetro del constructor.

    Aquí está el PropertyConfig.kt actualizado:

    @ConfigurationProperties(prefix = "edit")
    data class EditProperties(
        val field1: String,
        val field2: String,
        val field3: String,
        val field4: String
    )
    
    @Configuration
    @ConstructorBinding
    @PropertySource("classpath:properties/test.yml")
    data class PropertyConfig(
        val edit: EditProperties
    )
    

    Y aquí está el EditService.kt actualizado:

    @Service
    class EditService(private val propertyConfig: PropertyConfig) {
    
        fun print() {
            println(propertyConfig.edit.field1) // salida: test
        }
    
    }
    

    Con estos cambios, deberías poder recibir los valores debajo de edit como un mapa.</string,></string,>

Comments are closed.