Utilisation de Spring - CRUD

Signaler
-
Messages postés
16339
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2021
-
Bonjour,

J'essaye de mieux comprendre comment fonctionne Spring. Mon projet Java se découpe de la manière suivante :

-com.exemple.demo
->DemoApplication.java
->UserController.java
-com.exemple.demo.bo
->User.java
-com.exemple.demo.config
->ApplicationConfig.java
-com.exemple.demo.dal
->UserService.java
->UserServiceImpl.java
-com.exemple.demo.dao
->UserDao.java

Problème : je n'arrive pas à accéder à localhost:8088/users défini dans le controller. J'obtiens cette erreur : Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Voici mes classes :

pom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


DemoApplication :
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.demo.dao"})
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}


}


UserController :

package com.example.demo;

import java.util.Collection;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.bo.User;
import com.example.demo.dal.UserService;

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
@Qualifier(value = "userService")
UserService userv;

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@GetMapping(value="")
@ResponseStatus(HttpStatus.OK)
public Collection<User> getAll(){
System.out.println("----->getAll");
logger.debug("Getting all users.");
return userv.getAllUsers();
}
}


User :
package com.example.demo.bo;

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

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

@Id
private int id;
private String nom;
private String prenom;
private String age;


public int getId(){
return id;
}

public String getNom(){
return nom;
}

public String getPrenom(){
return prenom;
}

public String getAge(){
return age;
}

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

public void setNom(String nom) {
this.nom = nom;
}

public void setPrenom(String prenom) {
this.prenom = prenom;
}

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

@Override
public String toString(){
return "User [id=" + id + ", nom=" + nom + ", prenom=" + prenom + ", age=" + age + "]";
}

}


ApplicationConfig :
package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import com.example.demo.dal.UserService;
import com.example.demo.dal.UserServiceImpl;

@Configuration
@ComponentScan("com.exemple.demo")
public class ApplicationConfig {

@Bean(name = "userService")
public UserService getTopoService(){
return new UserServiceImpl();
}

}


UserService :
package com.example.demo.dal;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;

import com.example.demo.bo.User;

@Service
public interface UserService {

public void createUser(List<User> user);
public Collection<User> getAllUsers();
public Optional<User> findUserById(int id);
public void deleteUserById (int id);
public void updateUser (User user);
public void deleteAllUsers();


}


UserServiceImpl :
package com.example.demo.dal;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.example.demo.bo.User;
import com.example.demo.dao.UserDao;

@Component
public class UserServiceImpl implements UserService {

@Autowired
UserDao dao;

@Override
public void createUser(List<User> user) {
dao.saveAll(user);
}

@Override
public Collection<User> getAllUsers(){
return dao.findAll();
}

@Override
public Optional<User> findUserById(int id) {
return dao.findById(id);
}

@Override
public void deleteUserById(int id) {
dao.deleteById(id);
}

@Override
public void updateUser(User user) {
dao.save(user);
}

@Override
public void deleteAllUsers(){
dao.deleteAll();

}

}


UserDao :
package com.example.demo.dao;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import com.example.demo.bo.User;

@Repository
public interface UserDao extends MongoRepository<User, Integer> {


}


Configuration: Windows / Chrome 90.0.4430.93

2 réponses

Messages postés
16339
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2021
2 830
Bonjour,

Il faut que tu regardes les logs du serveur.

"This application has no explicit mapping for /error" n'est pas vraiment un problème.
Il y a eu une erreur donc Spring a essayé d'afficher la page /error qui n'est pas configurée.
Mais l'affichage de /error en soit ce n'est pas très important, le vrai problème que tu dois corriger c'est l'erreur d'origine, qui doit être dans les logs.
Voici mes logs, je ne vois rien d'anormal :

2021-05-04 14:12:48 - Starting DemoApplication using Java 15.0.1 on LAPTOP-HTN7GNV0 with PID 728 (C:\Users\Utilisateur\Downloads\demo\demo\target\classes started by Utilisateur in C:\Users\Utilisateur\Downloads\demo\demo)
2021-05-04 14:12:48 - No active profile set, falling back to default profiles: default
2021-05-04 14:12:49 - Bootstrapping Spring Data Reactive MongoDB repositories in DEFAULT mode.
2021-05-04 14:12:49 - Finished Spring Data repository scanning in 211 ms. Found 0 Reactive MongoDB repository interfaces.
2021-05-04 14:12:50 - Tomcat initialized with port(s): 8088 (http)
2021-05-04 14:12:50 - Starting service [Tomcat]
2021-05-04 14:12:50 - Starting Servlet engine: [Apache Tomcat/9.0.45]
2021-05-04 14:12:50 - Initializing Spring embedded WebApplicationContext
2021-05-04 14:12:50 - Root WebApplicationContext: initialization completed in 1962 ms
2021-05-04 14:12:51 - Initializing ExecutorService 'applicationTaskExecutor'
2021-05-04 14:12:51 - Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2021-05-04 14:12:51 - Opened connection [connectionId{localValue:1, serverValue:2}] to localhost:27017
2021-05-04 14:12:51 - Opened connection [connectionId{localValue:2, serverValue:1}] to localhost:27017
2021-05-04 14:12:51 - Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=9, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=38435000}
2021-05-04 14:12:51 - Tomcat started on port(s): 8088 (http) with context path ''
2021-05-04 14:12:51 - Started DemoApplication in 3.545 seconds (JVM running for 4.173)
Messages postés
16339
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mai 2021
2 830
Ces logs s'arrêtent au démarrage, mais ton erreur a eu lieu après le démarrage.
C'est au moment où tu as voulu accéder à localhost:8088/users qu'il y a eu l'erreur et donc la log.
Il faudrait donc retenter d'appeler cette page pour avoir à nouveau l'erreur et les logs correspondantes.

S'il n'y a rien qui s'affiche c'est que tu as, en plus, un problème de configuration des logs.