2017-07-27 3 views
0

J'ai metohod MyService # create qui lance CustomException. J'appelle cette méthode carte # en option comme ci-dessous:Comment gérer les exceptions dans les expressions lambda

return Optional.ofNullable(obj) 
     .map(optObj -> { 
      try { 
       return myService.create(optObj); 
      } catch (CustomException e) { 
       return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); 
      } 
     }) 
     .map(created -> new ResponseEntity<>("Operation successful", HttpStatus.CREATED)) 
     .orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST)); 

Et quand je l'appelle cette méthode avec des arguments qui provoquent exception alors CustomException est attrapée, mais dans le résultat que je reçois Opération réussie et le statut 200. Comment gérer cette exception lambda et renvoyer un message d'exception?

+0

Non, il jette exception dans lambda. Je veux attraper et retourner le bon résultat – user

+0

Quelle est la raison d'utiliser 'Optional 'du tout? Un simple 'if - then - else' suffit ici, peut-être en compagnon avec un' try-catch'. – Seelenvirtuose

+0

essayez d'utiliser la méthode wrapper qui sera responsable de la gestion de l'exception – sForSujit

Répondre

2

Vous interceptez l'exception et renvoyez new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST).

Ensuite, vous le mappez à new ResponseEntity<>("Operation successful", HttpStatus.CREATED).

Si vous voulez avoir new ResponseEntity<>("Operation successful", HttpStatus.CREATED) que si l'appel est réussie récrire votre code:

return Optional.ofNullable(obj) 
     .map(optObj -> { 
      try { 
       myService.create(optObj); 
       return new ResponseEntity<>("Operation successful", HttpStatus.CREATED); 
      } catch (CustomException e) { 
       return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); 
      } 
     }) 
     .orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));