0

У меня есть такая структура проекта:NoSuchBeanDefinitionException: Нет квалификационная рожкового типа найдены зависимость с помощью annotaition

project structure

persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
     version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 

<persistence-unit name="todos" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source> 
    <class>server.entity.Holiday</class> 
    <properties> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
    </properties> 

</persistence-unit> 
</persistence> 

web.xml (Как вы можете видеть, Я использую контекстный класс, где буду использовать JSON):

<?xml version="1.0" encoding="UTF-8"?> 

<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    metadata-complete="false"> 

<display-name>Spring MVC Application</display-name> 

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextClass</param-name> 
     <param-value> 
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>server.config</param-value> 
    </init-param> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
</web-app> 

WebAppCo nfig.class:

@Configuration 
@EnableWebMvc 
@ComponentScan("server") 
public class WebAppConfig extends WebMvcConfigurerAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); 
} 

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 
    converter.setObjectMapper(new ObjectMapper()); 
    converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON)); 

    converters.add(converter); 
} 


@Bean 
public InternalResourceViewResolver setupViewResolver() { 
    InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
    resolver.setPrefix("/pages/"); 
    resolver.setSuffix(".jsp"); 
    resolver.setViewClass(JstlView.class); 

    return resolver; 
} 
} 

HolidayController.class

@RestController 
@RequestMapping("/holidays") 
public class HolidayController { 

@Autowired 
private HolidayRepository holidayRepository; 

@RequestMapping(value = "", method = RequestMethod.GET) 
@ResponseBody 
public List<Holiday> getAllHolidays() { 
    // List<User> list = userRepository.findAll(); 
    return holidayRepository.findAll(); 
} 

HolidayRepository.class:

@Repository 
    public interface HolidayRepository extends JpaRepository<Holiday, Long> { 
} 

Я получил эту ошибку: org.springframework.beans.factory.NoSuchBeanDefinitionException: Не существует квалификационного компонента типа [server.repository.HolidayRepository], найденного для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

Помогите мне, пожалуйста.

+0

Вы пропустили конфигурацию весной фасоли (java based или xml), или вы просто не разместили его? –

+0

Я пытаюсь добавить все необходимые компоненты в WebAppConfig.class –

ответ

1

Мне кажется, что вам нужно @EnableJpaRepositories в вашем JavaConfig

См secton 3.2 ->http://docs.spring.io/spring-data/jpa/docs/1.9.4.RELEASE/reference/html/#repositories.definition

Создать новый класс JavaConfig:

import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 

@Configuration 
@EnableJpaRepositories 
class JpaSpringDataConfig {} 

Или добавьте к вашему XML конфигурации:

<jpa:repositories base-package="server.repository"/> 

Поскольку ваш журнал говорит, что ожидает WebApplicationInitializer, удалить web.xml и включают в себя класс, как:

public class RestWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] { JpaSpringDataConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[] { WebAppConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

} 
+0

На самом деле, я не понимаю, в каком файле я должен его поместить. –

+0

Вы пытались добавить его в начало WebAppConfig.class – morsor

+0

Если вы о «@EnableWebMvc», то да. Но я все еще ошибаюсь ... У меня возникло недоразумение о «@NoRepositoryBean», которое я нашел по вашей ссылке. Во всяком случае, кажется, что я забыл добавить некоторые необходимые компоненты ... –

0

Добавить аннотацию @Repository к реализации HolidayRepository interface.

+0

Это не обязательно для интерфейсов Spring Data (и реализации нет, потому что реализация создается динамически с помощью Spring Data). – dunni