IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Spring rest exception


Sujet :

Spring Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Spring rest exception
    Bonjour,

    J'ai un service web qui enregistre en base de données.
    Je voudrait remonté l'exception déclenché lors d'un enregistrement en base de données jusqu'au contrôleur pour remonter un code http 409 au client.
    Or comme j'ai fait actuellement, sa me provoque une erreur 500:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Integer creerProjet(Projet projet) throws SQLException {
    		int identifiant ;
    		entityManagerFactory.persist(projet);
    		identifiant = (Integer) entityManagerFactory.createQuery("SELECT identifiant FROM Projet WHERE identifiant = (SELECT MAX(identifiant) FROM Projet)", Integer.class).getSingleResult();
     
    		return identifiant;
    	}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public ResponseEntity<String> enregistrerUtilisateur(@RequestBody Projet projet){
    		try {
    			return ResponseEntity.status(HttpStatus.CREATED).body(projetService.creerProjet(projet).toString());
    		} catch (SQLException e) {
    			return ResponseEntity.status(HttpStatus.CONFLICT).body("Message erreur !");
    		}
    	}
    Je vois pas ce qui cloche.
    Entre le DAO et le contrôleur j'ai une classe service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public Integer creerProjet(Projet projet) throws SQLException {
    		int identifiant = projetDao.creerProjet(projet);
     
    		return identifiant;
    	}

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    regarde ton erreur 500, tu verra qu'elle est due à une toute autre erreur qu'une SQLException. Et pour cause, l'entityManager renvoie des PersistenceException, pas des SQLException. Et comme tu ne traite pas ces exceptions, elle remontent et finissent en http 500

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je te remercie sa fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public ResponseEntity<String> enregistrerUtilisateur(@RequestBody Projet projet){
    		try {
    			return ResponseEntity.status(HttpStatus.CREATED).body(projetService.creerProjet(projet).toString());
    		} catch (PersistenceException e) {
    			return ResponseEntity.status(HttpStatus.CONFLICT).body("Message");
    Par contre, j'ai un doute car je veut retourné un flux JSON et j'ai mi ResponEntity<String> et comme mon identifiant est en Integer, je doit faire un toString(). Je ne sais pas si c'est la bonne manière de faire

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Si tu veux du JSon, tu dois retourner un objet. Tu pourrais par exemple retourner l'objet Projet ainsi créé.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je l'ai refait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ResponseEntity<?> creerProjet(@RequestBody Projet projet){
    		Integer identifiantProjet;
    		try {
    			identifiantProjet = projetService.creerProjet(projet);
    		} catch (PersistenceException e) {
    			return new ResponseEntity<>("Message !", HttpStatus.CONFLICT);
    		}
    		return new ResponseEntity<>(identifiantProjet, HttpStatus.CREATED);
    	}
    Et quand je tests sur Postman le code 409 (CONFLIT), il me dit : Unexpected 'M'

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    en même temps ta réponse dans le cas d'un 409 n'est pas un Json, il ne risque pas d'arriver à le parser.

  7. #7
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Points : 3 769
    Points
    3 769
    Billets dans le blog
    12
    Par défaut
    Salut,

    Tu peux peut-être essayer de retourner une map :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final Map<String, String> message = new HashMap<>();
    message.put("message", "Message !");
    return new ResponseEntity<>(message, HttpStatus.CONFLICT);

    Ce qui aura pour effet de te retourner un JSON comme ceci : {"message": "Message !"}

Discussions similaires

  1. Décalage de date avec spring rest et la librairie jackson
    Par jean.dufour dans le forum Spring
    Réponses: 10
    Dernier message: 28/07/2015, 00h31
  2. [JSON] Paramètre Service Web JAX-REST exception
    Par Cédric B. dans le forum Services Web
    Réponses: 1
    Dernier message: 10/06/2013, 11h33
  3. Réponses: 2
    Dernier message: 26/05/2008, 12h47
  4. [Spring MVC] Exception Validator
    Par jamalmoundir dans le forum Spring Web
    Réponses: 5
    Dernier message: 26/06/2007, 15h52
  5. Spring remoting / Web services / Exceptions handling
    Par bidi dans le forum Services Web
    Réponses: 2
    Dernier message: 04/07/2006, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo