1
resposta

Could not autowire. No beans of "StoreApi" type found

Boa tarde, estou criando uma aplicação Spring boot, trata-se de um microserviço que ao receber uma request POST para cadastrar um cliente, internamente chama outra URL para repassar esse post, porém com problema na composição, não esta encontrando no bean.

Seguem as configurações:

Controller:

package com.luvida.store.controller

import com.luvida.store.DTO.ApiRequest
import com.luvida.store.DTO.ApiResponse
import com.luvida.store.model.entity.ExternoResponse
import com.luvida.store.service.StoreService
import org.springframework.http.MediaType
import org.springframework.stereotype.Controller
//import io.swagger.annotation.Api
import org.springframework.web.bind.annotation.*


@RestController
@RequestMapping ("/loja-luvida", produces = [MediaType.APPLICATION_JSON_VALUE])

//@Api ("api responsavel por fazer o bla bla")

class StoreController(val storeService: StoreService) {
    @PostMapping("/cadastro")
    @ResponseBody
    fun validadeFraud(@RequestBody apiRequest: ApiRequest): ExternoResponse {
        return storeService.sendCadastroCliente(apiRequest)
    }

}

Service:

package com.luvida.store.service

import com.luvida.store.DTO.ApiRequest
import com.luvida.store.DTO.ApiResponse
import com.luvida.store.model.entity.ExternoResponse

interface StoreService {
    fun sendCadastroCliente(apiRequest: ApiRequest): ExternoResponse


}

Implementação da service (onde estou recebendo o erro de Bean)

package com.luvida.store.service.impl

import com.luvida.store.DTO.ApiRequest
import com.luvida.store.integration.StoreApi
import com.luvida.store.model.entity.ExternoResponse
import com.luvida.store.service.StoreService
import org.springframework.stereotype.Service


@Service
class StoreServiceImpl(
        private val lojaApi: StoreApi
) : StoreService {
    override fun sendCadastroCliente(apiRequest: ApiRequest): ExternoResponse {
       return sendAnalysisFraud(apiRequest)
    }
}

Aqui é a interface para fazer a conexão com a API externa:

package com.luvida.store.integration

import com.luvida.store.DTO.ApiRequest
import com.luvida.store.DTO.ApiResponse
import org.springframework.cloud.openfeign.FeignClient
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.*


@FeignClient("CadastroCliente", url = "https://reqres.in/api")
interface StoreApi {
    @PostMapping("/user", consumes = [MediaType.APPLICATION_JSON_VALUE])
    @ResponseBody
    fun sendCadastroCliente(@RequestBody apiRequest: ApiRequest): ApiResponse
}

A mensagem de erro que recebo é:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.luvida.store.service.impl.StoreServiceImpl required a bean of type 'com.luvida.store.integration.StoreApi' that could not be found.


Action:

Consider defining a bean of type 'com.luvida.store.integration.StoreApi' in your configuration.
1 resposta

O problema é que você declarou a interface StoreApi mas não tem nenhuma classe implementando ela como um Bean do spring. Na classe StoreServiceImpl você espera que o Spring faça a injeção de uma implementação da interface StoreApi, mas ela não existe no seu projeto.