2016-07-20 3 views
2

zurückgeben Ich arbeite an einer Webanwendung mit Spring MVC und AngularJS, ich erstellen eine Rest-API, die ResponseEntities zurückgibt, die JSON-Zeichenfolgen enthält .Wie man eine Fehlermeldung in einer Methode zurückgibt, die eine ResponseEntity in Spring MVC mit @ControllerAdvice

Ich möchte in der Lage sein, wenn eine Ausnahme eine Zeichenfolge zurückgibt, die die Fehlerursache zu meiner Ansicht enthält und dann diesen Fehler mit einem Modal in AngularJS anzeigen, erstellte ich eine Klasse mit der @ControllerAdvice Annotation und in dieser Klasse ich definiert ein Verfahren, mit meiner benutzerdefinierten Ausnahme wie diese

@ControllerAdvice 
public class GlobalExceptionHandlerController { 

@ExceptionHandler(PersonalException.class) 
public String handleCustomExceptionRazon(PersonalException ex) { 

    String errorMessage = "custom error"; 


    return errorMessage; 
} 
} 

ich habe die folgende Schnittstelle

public interface ClientDAO { 

public void insertCLiente(Client client) throws PersonalException 
} 

Und in meiner Implementierung

@Override 
public void insertCLiente(Client client) throws PersonalException{ 

//method implementation 
if (searchCLiente(client.name())) { 
     throw new PersonalException("client aleady exists"); 
    } else { 
//method implementation 
} 
} 

Meine searchClient Methode

public boolean searchClient(String name) { 
try { 
    //method implementation 

} catch (DataAccessException dataAccessException) { 
     System.out.println(""); 
     dataAccessException.printStackTrace(); 
    } catch (Exception e) { 
     System.out.println(""); 
     e.printStackTrace(); 
    } 
    //method implementation 
} 

Kundencenter-Controller

@Autowired 
    ClientDAO clientDAO; 

@RequestMapping(value = "/client/", method = RequestMethod.POST) 
public ResponseEntity<Void> createClient(@RequestBody final String DTOClientData, UriComponentsBuilder ucBuilder) { 

//here I parse the JSON data and create my Client object 

    //here I dont know how can I return the error message 

clientDAO.insertClient(client); 

    } 

Meine benutzerdefinierte Exception

public class PersonalException extends Exception { 

public PersonalException (String msg) { 
    super(msg); 
} 

} 

Ich weiß nicht, un mein clientController Methode create wie kann ich wieder ein Ausnahme des Typs PersonalException, die ich erstellt habe

Antwort

1
//here I dont know how can I return the error message 

Werfen Sie einfach die Ausnahme von Controller.

@RequestMapping(value = "/client/", method = RequestMethod.POST) 
public ResponseEntity<Void> createClient(@RequestBody final String DTOClientData, UriComponentsBuilder ucBuilder) throws PersonalException { 

Sie Fehlermeldung in GlobalExceptionHandlerController wie diese zurückgeben kann ...

/** 
* REST exception handlers defined at a global level for the application 
**/ 
@ControllerAdvice 
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { 

    @ExceptionHandler(value = { PersonalException.class }) 
    protected ResponseEntity<RestResponse> handleUnknownException(PersonalException ex, WebRequest request) { 
     LOGGER.error(ex.getMessage(), ex); 

     return new ResponseEntity<RestResponse>(new RestResponse(Boolean.FALSE, ImmutableList.of("Exception message"), null), HttpStatus.INTERNAL_SERVER_ERROR); 
    } 

Nun, haben Sie vielleicht bemerkt, dass wir nicht die Ausnahme auch im Controller umgehen. Stattdessen werfen wir es in die Deklaration, in der Hoffnung, dass wir irgendwo diesen außergewöhnlichen Fall behandelt haben, der dem Nutzer eine nett aussehende Toaster-Nachricht zeigt.

Die Frage bleibt vielleicht - Wo zur Hölle nehme ich die Ausnahme? Es wird von @ExceptionHandler in GlobalExceptionHandlerController verarbeitet.

+0

Danke, aber dieses RestResponse-Objekt haben Sie es erstellt, oder es ist ein Teil oder eine Bibliothek? –

+0

https://github.com/royrusso/spring-mvc-rest-mockito/blob/master/src/main/java/org/royrusso/mvc/rest/RestResponse.java –

+0

ImmutableList.of ("Ausnahmemeldung") ist nur eine Zeichenfolge –