Как вернуть сообщение об ошибке из службы отдыха - PullRequest
0 голосов
/ 22 ноября 2018

Я определил службу отдыха с загрузкой Spring, которая возвращает интерфейс.Когда возникает ошибка в сервисе, как я могу вернуть значимое сообщение об ошибке?В результате в браузере отображается Json типа MyInterface.

Код ниже - это служба, вызываемая контроллером:

public MyInterface getSomeTask() {

    // business logic here
    MyInterface myObject= getRelatedClass();

    if(myObject == null){
       // how to return error message 
    }

    return myObject;
 }

1 Ответ

0 голосов
/ 22 ноября 2018

Одной из возможностей было бы генерировать Exception, а затем обрабатывать его с помощью Spring, чтобы он возвращал правильный json.

Возможно, вы захотите посмотреть эту статью об обработке ошибок.

Вы можете создать собственное исключение, которое будет выброшено в вашу логику, а затем обработать его:

if(myObject == null){
   throw new CouldNotGetRelatedClassException(); 
}

, и в контроллере вы можете использовать метод обработки ошибок, например:

public class FooController {

   @ExceptionHandler({ CouldNotGetRelatedClassException.class})
   public void handleException() {
       // logic of exception handling
   }

}

Другим способом может быть создание класса с аннотацией @ControllerAdvice, которая создаст пользовательский ответ json на выданные исключения:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

   @ExceptionHandler(value = {CouldNotGetRelatedClassException.class})
   protected ResponseEntity<Object> handleNotFound(
     RuntimeException ex, WebRequest request) {
       String bodyOfResponse = "This should be application specific";
       return handleExceptionInternal(ex, bodyOfResponse, 
         new HttpHeaders(), HttpStatus.NOT_FOUND, request);
   }
}

Однако вы можете знать, что ответы на ошибки могут иметь другую структуру, чем ваш обычный объектпоэтому вы можете захотеть вернуть его с другим кодом состояния HTTP, чтобы интерфейс мог определить, что это сообщение будет десериализовано по-другому.

...