Одной из возможностей было бы генерировать 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, чтобы интерфейс мог определить, что это сообщение будет десериализовано по-другому.