2017-06-25 4 views
0

Ich verwende Spring Boot 1.5.3, Spring Data REST, Frühling HATEOAS, Hibernate. Spring Data REST verwaltet in einer hübschen Weise Ausnahmen abgesehen, ein gut formatierte JSON-Objekts wie diese Rückkehr:Wo erstellt Spring Data REST eine Ausnahme-JSON-Antwort?

{ 
    "timestamp": "2017-06-24T16:08:54.107+0000", 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.springframework.dao.InvalidDataAccessApiUsageException", 
    "message": "org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved beforeQuery current operation : com.test.server.model.workflows.WorkSession.checkPoint -> com.test.server.model.checkpoints.CheckPoint; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved beforeQuery current operation : com.test.server.model.workflows.WorkSession.checkPoint -> com.test.server.model.checkpoints.CheckPoint", 
    "path": "/api/v1/workSessions/start" 
} 

Ich brauche Ausnahmemeldungen zu lokalisieren, und ich möchte das gleiche JSON-Format von Spring Data REST halten und nehmen ein Blick, wie sie das Ausnahmeobjekt erstellen. Ich bin auf der Suche nach dem Code, wo die Ausnahme im Quellcode erstellt wird, aber ich bin nicht in der Lage, das zu finden. Vielleicht ist ExceptionMessage nützlich, aber es hat nicht die Struktur des Objekts, die am Ende für den Benutzer ankommen.

Wo ist der Punkt, an dem die Ausnahme erstellt wird?

+0

von der Ausnahmemeldung brauchen es scheint, dass Die Ausnahme wird während der Sicherungsphase erstellt. Es scheint, dass es eine Beziehung zu einem nicht wirklich erstellten Objekt in der DB –

+0

@ AngeloImmediate gibt Ich interessiere mich nicht für die Ausnahme selbst. Ich bin daran interessiert, wie Spring Data REST das JSON-Objekt auf diese Weise erstellt. Unabhängig von der Ausnahme ist das JSON-Objekt immer das. Ich möchte den Code finden, wo das Objekt erstellt wird. Vielen Dank – drenda

Antwort

1

gibt es eine Antwort, von nützlichem Link

Wie in der Dokumentation zur Fehlerbehandlung beschrieben, können Sie Ihre eigene Bohne vorsehen, dass implementiert ErrorAttributes, um die Kontrolle über den Inhalt zu übernehmen.

hier ist beispielsweise aus der Dokumentation:

@ControllerAdvice(basePackageClasses = FooController.class) 
public class FooControllerAdvice extends ResponseEntityExceptionHandler { 

    @ExceptionHandler(YourException.class) 
    @ResponseBody 
    ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) { 
     HttpStatus status = getStatus(request); 
     return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status); 
    } 

    private HttpStatus getStatus(HttpServletRequest request) { 
     Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); 
     if (statusCode == null) { 
      return HttpStatus.INTERNAL_SERVER_ERROR; 
     } 
     return HttpStatus.valueOf(statusCode); 
    } 
    } 

nur Locale in handleControllerException Methode und Message in Beratung injizieren, und in handleControllerException Ausnahmemeldungen erhalten lokalisieren, die Sie

Verwandte Themen