2017-07-10 10 views
0

Ich baue eine REST-API mit Spring-Boot-und DAO-Schicht ist in Hibernate implementiert. Ich muss verstehen, die richtige Art zu werfen und Umgang mit Exception in der Anwendung.Aktuell mache ich es in auf diese WeiseAusnahmebedingung im Spring Boot Anwendung mit Hibernate

@Repository 
public class UserDaoImpl 
{ 
    public getAllUsers() throws Exception 
    { 
      //get All Users from DB 
    } 
} 

@Service 
public class UserServiceImpl 
{ 
    public getAllUsers throws MyCustomException 
    { try{ 
      userDaoImpl.getAllUsers(); 
     } 
     catch(Exception e) 
     { 
      throw MyCustomException(); 
     } 

    }   

} 

und in der Exception-Mapper

@ControllerAdvice 
public class ApplicationExceptionHandler extends ResponseEntityExceptionHandler { 

@ExceptionHandler({MyCustomException.class}) 
    @ResponseBody 
    public ResponseEntity<?> handleCustomException(Exception e) { 
    log.error("", e); 
    Map<String, String> error = new HashMap<String, String>(); 
    error.put("message", e.getMessage()); 
    return new ResponseEntity<>(error, HttpStatus.NOT_ACCEPTABLE, MessageResource.getLogMessage("BAD_REQUEST_EXCEPTION")); 
    } 

} 

public class MyCustomException extends RuntimeException 
{ 
    ///// .... 


} 

So habe ich throws-Klausel hinzugefügt (throws Exception) in DAO Schicht und fangen an Service-Schicht und wickeln sie es in Angepasste Exception (ungeprüfte Ausnahme) und tun Vererbt die Ausnahme nicht auf der Controller-Ebene. Ist das korrekt? oder gibt es einen besseren Weg?

Antwort

0

Ich würde Ihnen empfehlen, allgemeine @ExceptionHandler({Exception.class}) für alle Fälle zu haben, die Sie nicht speziell behandeln möchten. Es ist auch in Ordnung, separate Ausnahmeklassen für Situationen zu erstellen, die eine benutzerdefinierte Behandlung erfordern.

Es hängt davon ab, was Sie erreichen möchten. Über Ihren Fall. Ausnahme in DAO Schicht bedeutet nicht, dass Anfrage falsch war oder nicht die richtigen Parameter zur Verfügung stellte. Es könnte Mapping-Probleme, DB-Zugriffsprobleme und usw. sein. Also würde ich es nicht zu meiner benutzerdefinierten Ausnahme umbrechen, oder zumindest in allgemeine DataAccessException wrap, machen Sie gute Protokollierung um und einige allgemeine Fehlercode an den Client zurück.

Verwandte Themen