首页 > 解决方案 > Bean 仅在作为方法参数注入时才起作用

问题描述

我正在开发一个使用 RestTemplate 与 REST API 通信的客户端应用程序。

RestTemplate 是这样配置的:

@Configuration
class RestTemplateConfiguration {

    @Bean
    fun restTemplate(restTemplateBuilder: RestTemplateBuilder): RestTemplate {
        return restTemplateBuilder.build()
    }
}

但我也尝试过这样配置它:

@Configuration
class RestTemplateConfiguration {

    @Bean
    fun restTemplate(restTemplateBuilder: RestTemplateBuilder): RestTemplate {
        val restTemplate = RestTemplate()
        val converter = MappingJackson2HttpMessageConverter ()
        converter.objectMapper = ObjectMapper()
        restTemplate.messageConverters.add(converter)
        return restTemplate
    }
}

因此,当 bean 作为方法参数注入时,仅出于测试目的,它可以正常工作:

@GetMapping
fun getAll(restTemplate: RestTemplate, model: Model): String {
    val response = restTemplate.exchange("http://localhost:8080/api/metagame/archetypes", HttpMethod.GET, null,
            object : TypeReferences.PagedModelType<ArchetypeModel>() {})

    val archetypes = response.body?.content ?: ArrayList<EntityModel<ArchetypeModel>>()

    model.addAttribute("archetypes", archetypes)

    return "metagame/archetypes/index"
}

但是,每次它作为构造函数参数注入时,响应都是空的:

class ArchetypeController(val restTemplate: RestTemplate)

是 Kotlin 问题还是配置问题...?由于 Spring 没有给我任何错误消息,我完全迷失了:/

标签: springspring-bootkotlinresttemplate

解决方案


推荐阅读