Utilisation de Spring - CRUD

Fermé
NathalieJ - 4 mai 2021 à 09:26
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 4 mai 2021 à 17:46
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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 mai 2021 à 12:34
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.
0
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)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 mai 2021 à 17:46
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.
0