2017-07-18 1 views
1

J'essaie d'implémenter un service web simple en utilisant Spring 4. Mais mon userService ne semble pas fonctionner.Spring Data Rest Dépôt non trouvé

je configuration comme ceci:

public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 
    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[]{ PersistenceConfig.class }; 
    } 

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

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

Avec config pour mon persistance en mémoire HSQLDB comme ceci:

@Configuration 
@ComponentScan("example.userService") 
@PropertySource("classpath:hibernate.properties") 
@EnableJpaRepositories("example.userService.repo") 
public class PersistenceConfig { 

    @Autowired 
    Environment env; 

    @Bean 
    LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     /* ... */ 
     return entityManagerFactoryBean; 
    } 

    @Bean 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
       .setType(EmbeddedDatabaseType.HSQL) 
       .addScript("classpath:db/data.sql") 
       .build(); 
    } 
} 

J'ai une entité User. Et voici mon dépôt:

@Repository 
@RepositoryRestResource 
public interface UserRepo extends CrudRepository<User, Long> { 
    List<User> findAll(); 
    List<User> findByFirstName(@Param("firstName") String firstName); 
} 

Et j'ai aussi na jetée embarqué sur le port 9999 pour exécuter ce service.

Et quand la jetée démarre et que je passe à localhost:9999/api/users/ ou /user/1 ou si cela ressemble à cela, une erreur 404 se produit. findByFirstName méthode ne fonctionne pas non plus.

Je pense que cela se produit parce que Servlet Dispatcher ne connaît pas mon référentiel exposé. Mais je ne sais pas non plus comment 'l'enregistrer' puisque je ne veux pas utiliser le contrôleur pour cela.

J'ai lu printemps docs here, here et un autre tutoriels, mais la plupart d'entre eux ne fournissent pas de configs et décrire des dépôts qui tout simplement travail juste.

Des suggestions sur ce que je peux faire avec et ce qui peut causer ce problème puisque rien n'est montré dans la console et au moment de la compilation tout fonctionne bien?

Merci d'avance!

UPD 1: J'ai ajouté @RepositoryRestResource à UesrRepo selon Accessing JPA Data with REST mais /api/users est encore 404.

UPD 2: J'ai question simplifiée en supprimant partie de service de celui-ci, car il nécessite un contrôleur selon le commentaire de @ Antoniossss. Ce n'est pas si simple: quelle configuration (le cas échéant) dois-je utiliser pour exposer le référentiel?

+0

Je ne vois pas le (s) contrôleur (s) implémentant les points de terminaison/users// users/1 – chomnoue

+0

@chomnoue Les référentiels ne sont-ils pas exposés par leur nom? Je veux dire UserRepository devrait être exposé à '/ users' ou'/user/'(mais ce n'est pas la meilleure pratique pour les exposer directement). Je voudrais les utiliser cependant sans contrôleurs et services. Est-ce impossible? –

+0

Vous avez besoin de @RepositoryRestResource si vous souhaitez exposer des référentiels en tant que ressources de repos. https://spring.io/guides/gs/accessing-data-rest/ – chomnoue

Répondre

0

Il semblerait que vous ayez manqué Spring data rest configuration et que vous n'ayez qu'une configuration MVC. Vous devez ajouter le bean RepositoryRestConfigurer à votre configuration ou étendre RepositoryRestConfigurerAdapter.