Así que he estado aprendiendo de la Primavera en la que las parejas de semana, ha estado siguiendo este tutorial

La construcción de un Servicio Web RESTful

Todo iba bien hasta que he intentado integrar a mongodb. Así que seguir este tutorial.

Acceso a Datos con MongoDB

Pero mi consulta es parcialmente todavía el uso de la primera. Así que mi estructura de directorios del proyecto es como este.

src/
├── main/
   └── java/
|       ├── model/
|       |   └── User.java
|       ├── rest/
|       |   ├── Application.java
|       |   ├── IndexController.java
|       |   └── UsersController.java
|       └── service/
|           └── UserService.java
└── resources/
    └── application.properties

Este es mi model/User.java archivo

package main.java.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="user")
public class User {

    private int age;
    private String country; 
    @Id
    private String id;
    private String name;


    public User() {
        super();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

Este es mi rest/UsersController.java archivo

package main.java.rest;

import java.util.List;
import main.java.service.UserService;
import main.java.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/users")
public class UsersController {

    @Autowired
    UserService userService;

    @RequestMapping(method = RequestMethod.GET)
    public List<User> getAllUsers() {
        return userService.findAll();
    }
}

Este es mi service/UserService.java archivo

package main.java.service;

import java.util.List;
import main.java.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserService extends MongoRepository<User, String> {
    public List<User> findAll();
}

Podía compilar ellos (estoy usando gradle para la compilación porque estoy siguiendo el tutorial), pero cuando voy a ejecutar el archivo jar que estaba tirando este error.


APLICACIÓN NO PUDO INICIAR


Descripción:

Campo userService en la principal.java.resto.UsersController requiere de un bean de
tipo principal.java.servicio.UserService’ que no pudieron ser encontrados.

Acción:

Considerar la posibilidad de definir un bean de tipo ‘principal.java.servicio.UserService’ en
su configuración.

No está seguro de lo que está mal empiezo a buscar en google y descubrí que necesito para incluir Beans.xml archivo y registro de la userService en ella. Lo hice pero no funciona. Soy realmente nuevo en esto así que realmente no tienen idea de lo que está pasando.

InformationsquelleAutor Eka Rudianto | 2017-03-20

17 Comentarios

  1. 99

    Resuelto. Así, de forma predeterminada, todos los paquetes que cae bajo @SpringBootApplication declaración será escaneado.

    Asumiendo mi clase principal ExampleApplication que ha @SpringBootApplication declaración se declara dentro de com.example.something, a continuación, todos los componentes que cae bajo com.example.something es escaneados mientras com.example.applicant no serán analizados.

    Por lo tanto, hay dos maneras de hacer sobre la base de este pregunta. Uso

    @SpringBootApplication(scanBasePackages={
    "com.example.something", "com.example.application"})

    De esa manera, la aplicación analiza todos los componentes especificados, pero creo que lo que si la escala se hicieron cada vez más grande ?

    Por lo que utilizar el segundo método, por la reestructuración de mis paquetes y funcionó ! Ahora mis paquetes de la estructura se hizo como este.

    src/
    ├── main/
       └── java/
    |       ├── com.example/
    |       |   └── Application.java
    |       ├── com.example.model/
    |       |   └── User.java
    |       ├── com.example.controller/
    |       |   ├── IndexController.java
    |       |   └── UsersController.java
    |       └── com.example.service/
    |           └── UserService.java
    └── resources/
        └── application.properties
    • nada ha cambiado mucho en realidad, acabo de cambiar el nombre de algunos de los paquetes y las clases de @GuoJing
    • Hay un error tipográfico. No abrir { para scanBasePackages= "com.example.something","com.example.application"
  2. 12

    Yo también tenía el mismo error:

    ***************************
    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    Field repository in com.kalsym.next.gen.campaign.controller.CampaignController required a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' that could not be found.
    
    
    Action:
    
    Consider defining a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' in your configuration.de here

    Y mis paquetes fueron construidos en la misma forma como se menciona en la respuesta. He solucionado mi problema mediante la adición de EnableMongoRepositories anotación en la clase principal como este:

    @SpringBootApplication
    @EnableMongoRepositories(basePackageClasses = CustomerRepository.class)
    public class CampaignAPI {
    
        public static void main(String[] args) {
            SpringApplication.run(CampaignAPI.class, args);
        }
    }
  3. 11

    He encontrado con el mismo problema y todo lo que tenía que hacer era colocar la Aplicación en un paquete de un nivel más alto que el de servicio, dao y dominio de paquetes.

    • Usted puede elaborar un poco más mostrando la vieja estructura del paquete (que no funciona) y la reestructuración de nivel de paquete?
    • No puedo hablar por el OP, pero en mi caso me encontré con este problema porque a mi código desviado desde el recomendado ( docs.de la primavera.io/spring-boot/docs/actual/referencia/html/… ): mi clase de aplicación no se encuentra en la parte superior de un paquete de jerarquía.
  4. 7

    Este hilo es viejo, pero ahora estoy publicando mi respuesta, que puede ser útil para los demás.

    He tenido el mismo problema.
    Resultó que no es otra clase con el mismo nombre en otro módulo. He cambiado el nombre de la clase y resolvió el problema.

  5. 5

    Pasado un montón de tiempo a causa de la importación automática.
    Intellij Idea somewhy importados @Service de import org.jvnet.hk2.annotations.Service; en lugar de import org.springframework.stereotype.Service;!

    • Puede actualizar su respuesta y explique lo que está haciendo. Muchas gracias de antemano
    • Lo que no entiendo de mi respuesta?Tengo el mismo error, como en la pregunta, tratando de ejecutar el proyecto. Fue porque me ha importado Service de el mal de la biblioteca.
    • todavía no hay claridad en su respuesta. Su respuesta puede ser correcta y puede que haya funcionado para usted, pero la forma que aquí se presenta es confuso y no fácil de leer
    • Creo que mi primer comentario respuestas tuyo’ comentario así.
  6. 2

    Normalmente podemos resolver este problema en dos aspectos:

    1. de anotación debe ser utilizado para Primavera de Arranque escaneo de la bean, como @Component;
    2. la escaneo camino se incluyen las clases, como todos los demás mencionados.

    Por cierto, hay una muy buena explicación para la diferencia entre @Componente, @Repositorio, @Servicio, y @Controlador.

  7. 0

    En mi caso sólo he puesto la Clase MyprojectApplication en un paquete(com.ejemplo.de inicio) con el mismo nivel de modelo, controlador,los paquetes de servicio.

  8. 0

    En mi caso, que accidentalmente se define la clase de servicio abstract mientras que hacer copiar y pegar.

    @Serivce
    @Valdiated
    public abstract class MyService { //remove the abstract modifier!!!
    }
  9. 0

    Mi Asignador de implementación de clases en mi carpeta de destino han sido eliminados, así que mi Asignador de interfaces no tenía las clases de implementación de más. Por lo tanto tengo el mismo error Field *** required a bean of type ***Mapper that could not be found.

    Yo simplemente tenía que volver a generar mi mappers de implementaciones con maven, y actualizar el proyecto…

  10. 0

    He llegado a este post en busca de ayuda, mientras que el uso de Primavera Webflux con Mongo Repositorio.

    Mi error fue similar a la del propietario

    Field usersRepository in foobar.UsersService required
    a bean of type 'foobar.UsersRepository' that could not be found.

    Como yo estaba trabajando antes con Spring MVC yo estaba sorprendido por este error.

    Debido a la búsqueda de ayuda no era tan obvio que me voy a poner la respuesta a esta pregunta, puesto que de alguna manera está relacionado, y esta pregunta es alta en los resultados de búsqueda.

    Lo primero que debe recordar acerca de lo que se menciona en la respuesta marcada como la aceptación de un paquete de jerarquía.

    Segunda cosa importante es que si usted utiliza Webflux es necesario utilizar algún paquete diferente, mientras que cuando se utiliza MVC de Spring por ejemplo, para MongoDB necesita agregar

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
    </dependency>

    con reactiva al final.

  11. 0

    El uso de todos @ Anotaciones solucionado mi problema. (Sí, soy nuevo en Primavera)
    Si usted está usando un servicio de clase, agregue @de Servicio, y lo mismo para @Controlador y @Repositorio.

    Entonces este anotaciones en el App.java solucionado el problema (estoy usando JPA + Hibernate)

    @SpringBootApplication
    @EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class })
    @ComponentScan(basePackages = {"es.unileon.inso2"})
    @EntityScan("es.unileon.inso2.model")
    @EnableJpaRepositories("es.unileon.inso2.repository")

    Árbol de paquetes:

    src/
    ├── main/
       └── java/
    |       ├── es.unileon.inso2/
    |       |   └── App.java
    |       ├── es.unileon.inso2.model/
    |       |   └── User.java
    |       ├── es.unileon.inso2.controller/
    |       |   ├── IndexController.java
    |       |   └── UserController.java
    |       ├── es.unileon.inso2.service/
    |       |    └── UserService.java
    |       └── es.unileon.inso2.repository/
    |            └── UserRepository.java
    └── resources/
        └── application.properties
  12. 0

    Tengo el mismo Problema, fijado por la Adición de
    @EnableMongoRepositories(«en.topthree.util»)

    package in.topthree.core;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
    
    import in.topthree.util.Student;
    
    @SpringBootApplication
    @EnableMongoRepositories("in.topthree.util")
    public class Run implements CommandLineRunner {
    
        public static void main(String[] args) {
            SpringApplication.run(Run.class, args);
            System.out.println("Run");
        }
    
        @Autowired
        private Process pr;
    
        @Override
        public void run(String... args) throws Exception {
            pr.saveDB(new Student("Testing", "FB"));
            System.exit(0);
        }
    
    }

    Y mi Repositorio es:

    package in.topthree.util;
    
    import org.springframework.data.mongodb.repository.MongoRepository;
    
    public interface StudentMongo extends MongoRepository<Student, Integer> {
    
        public Student findByUrl(String url);
    }

    Ahora Su Trabajo

  13. -1

    El uso de esta solucionado mi problema.

    @SpringBootApplication(scanBasePackages={"com.example.something", "com.example.application"})
  14. -1

    Esto puede suceder cuando dos granos tienen los mismos nombres.

    Module1Beans.java

    @Configuration
    public class Module1Beans {
        @Bean
        public GoogleAPI retrofitService(){
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://www.google.com/")
                    .addConverterFactory(JacksonConverterFactory.create())
                    .build();
            return retrofit.create(GoogleAPI.class);
        }
    }

    Module2Beans.java

    @Configuration
    public class Module2Beans {
        @Bean
        public GithubAPI retrofitService(){
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://www.github.com/")
                    .addConverterFactory(JacksonConverterFactory.create())
                    .build();
            return retrofit.create(GithubAPI.class);
        }
    }

    Un bean llamado retrofitService se crea por primera vez, y es tipo es GoogleAPI, a continuación, cubierto por una GithubAPI becauce ambos son creados por un retrofitService() método.
    Ahora, cuando usted @Autowired un GoogleAPI obtendrá un mensaje como Field googleAPI in com.example.GoogleService required a bean of type 'com.example.rest.GoogleAPI' that could not be found.

Dejar respuesta

Please enter your comment!
Please enter your name here