2017-11-10 1 views
0

Ich frage mich, wie es möglich ist, einen benutzerdefinierten Statuscode und eine Nachricht von einem Rest-Endpunkt zurückzugeben, wenn eine Ausnahme ausgelöst wird. Der folgende Code ermöglicht es mir, meinen eigenen, benutzerdefinierten Statuscode 571 zu werfen, wenn UserDuplicatedException ausgelöst wird, aber ich kann anscheinend keine Möglichkeit finden, ihm eine zusätzliche Nachricht oder einen Grund für den Fehler zu geben. Kannst du mir bitte helfen?Hinzufügen einer benutzerdefinierten Nachricht zu einem @ ExceptionHandler im Frühjahr

@ControllerAdvice 
public class ExceptionResolver { 

@ExceptionHandler(UserDuplicatedException.class) 
public void resolveAndWriteException(Exception exception, HttpServletResponse response) throws IOException { 
    int status = 571; 
    response.setStatus(status); 
} 

}

+0

'HttpServletResponse' hat eine' sendError' Methode, aber das hat andere in seiner javadoc dokumentiert Auswirkungen. Schau in Es hinein. –

Antwort

0

Dies sollte einfach sein.

Erstellen von benutzerdefinierter Fehlerklasse:

public class Error { 
    private String statusCode; 
    private String message; 
    private List<String> errors; 
    private Date date; 

    public Error(String status, String message) { 
     this.statusCode = status; 
     this.message = message; 
    } 

    //Getters - Setters 
} 

Und in Ihrer @ControllerAdvice als

@ControllerAdvice 
public class ExceptionResolver { 

    @ExceptionHandler(UserDuplicatedException.class) 
    public ResponseEntity<Error> resolveAndWriteException(UserDuplicatedException e) throws IOException { 
     Error error = new Error("571", e.getMessage()); 
     error.setErrors(//get your list or errors here...); 
     return new ResponseEntity<Error>(error, HttpStatus.Select-Appropriate); 
    } 
} 
0

werden Sie können eine json in der Antwort zurück, kann yo Gson verwenden, um ein Objekt zu JSON-Transformation, bitte versuchen Sie dies:

public class Response{ 
    private Integer status; 
    private String message; 

    public String getMessage(){ 
     return message; 
    } 

    public void setMessage(String message){ 
    this.message = message; 
    } 

    public Integer getStatus(){ 
     return status; 
    } 

    public Integer setStatus(Integer status){ 
     this.status = status; 
    } 
}  

@ExceptionHandler(UserDuplicatedException.class) 
@ResponseBody 
public String resolveAndWriteException(Exception exception) throws IOException { 
    Response response = new Response(); 
    int status = 571; 
    response.setStatus(571); 
    response.setMessage("Set here the additional message"); 
    Gson gson = new Gson(); 
    return gson.toJson(response); 
} 
Verwandte Themen