Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

450
Vistas
Spring no setter encontrado para la propiedad

Estoy tratando de crear una data class configuración en Kotlin con Spring Boot. Tengo la siguiente clase:

 @Configuration @ConfigurationProperties(prefix = "spring.braintree") data class BraintreeConfigProperties( val merchantId: String = "", val publicKey: String = "", val privateKey: String = "", val environment: Environment = Environment.SANDBOX )

Y las siguientes propiedades:

 spring.braintree.merchantId=${BRAINTREE_MERCHANT_ID} spring.braintree.publicKey=${BRAINTREE_PUBLIC_KEY} spring.braintree.privateKey=${BRAINTREE_PRIVATE_KEY}

Cuando ejecuto la aplicación obtengo la siguiente excepción:

 APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'spring.braintree' to com.x.ps.config.BraintreeConfigProperties$$EnhancerBySpringCGLIB$$311e0531: Property: spring.braintree.merchant-id Value: ${BRAINTREE_MERCHANT_ID} Origin: class path resource [application.properties] - 5:29 Reason: java.lang.IllegalStateException: No setter found for property: merchant-id Action: Update your application's configuration

Sin embargo, también tengo una clase que es exactamente igual a la clase BraintreeConfigProperties . Esta clase ( DatabaseConfigProperties ) funciona. Son completamente idénticos.

Lo que he probado:

  1. Comprobado si los nombres de propiedad realmente coinciden con los nombres de configuración.
  2. Probé las tres propiedades de configuración por separado.
  3. Se adjuntó una variable que no es de entorno con el valor 1234 a la propiedad de mercantilId, lo que da como resultado la siguiente excepción:
 APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'spring.braintree' to com.x.ps.config.BraintreeConfigProperties$$EnhancerBySpringCGLIB$$62509e61: Property: spring.braintree.merchant-id Value: 1234 Origin: class path resource [application.properties] - 5:29 Reason: java.lang.IllegalStateException: No setter found for property: merchant-id Action: Update your application's configuration
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema aquí es que val es final y var se puede cambiar. Entonces deberías cambiar tus propiedades a var .

Más información aquí: https://medium.com/mindorks/kotlin-series-val-vs-var-difference-android-kotlin-ecad780daeb7

over 4 years ago · Santiago Trujillo Denunciar

0

Kotlin solo genera un captador cuando declara un campo como val . Sin embargo, Spring usa un setter para inyectar valores de propiedades en el objeto.

Con las versiones más nuevas de Spring Boot, puede hacer uso de data class es con campos val , inyectando valores a través del constructor en lugar de usar setters.

Puede hacerlo usando @ConstructorBinding , vea el siguiente ejemplo de los documentos oficiales :

 @ConstructorBinding @ConfigurationProperties("example.kotlin") data class KotlinExampleProperties( val name: String, val description: String, val myService: MyService) { data class MyService( val apiToken: String, val uri: URI ) }

Al usar lateinit var o una var que se inicializa en nulo también funciona. Lo más probable es que no desee cambiar esos campos después de la inicialización, por lo que val parece encajar mejor la mayor parte del tiempo en lugar de declarar una var y generar un setter bajo el capó.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda