Как передать вывод исключения API через собственный REST-сервис? - PullRequest
0 голосов
/ 01 июля 2019

Резюме: Я хочу передать действительный вывод исключения, предоставленный одной конечной точкой службы REST, конечному пользователю с помощью моей собственной службы отдыха.

Что я сделал, так это то, что я назвал эту услугу в классе обслуживания, используя класс RestTemplate, он выдает действительный вывод при действительном почтовом запросе. Но когда я передаю неверный ввод, я получаю только результат «400 BAD REQUEST» в своем классе обслуживания, где я вызвал этот API. Но когда я вызываю этот API отдельно, используя почтальон, я получаю ожидаемый результат.

Пример кода:

class Abc {
    ResponseEntity<String> = response;
    static final String url = "https://abc-xyz.com/client-rest-end-point-url";
    public ResponseEntity getDetails(RequestInput requestInput) {

        try{
            response=restTemplate.postForObject(url,requestInput,String.class);
        } catch(Exception e) {
            ResponseEntity response = (ResponseEntity<ErrorModel>)restTemplate.postForEntity(url,requestInput,ErrorModel.class);
        }//try-catch
    }//getDetails method
}//class

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вы можете создать собственный класс исключений для всего приложения и отправить данные в JSON с помощью ключевого слова throw. Предположим, у вас есть класс исключений:

public class TestException extends Exception {

private static final long serialVersionUID = 1L;
private String code;
private String detailMessage;

public TestException() {
};

public TestException(String message, String code, String detailMessage) {
    super(message);
    this.code = code;
    this.detailMessage = detailMessage;
}

public TestException(String message, String code) {
    super(message);
    this.code = code;
}
//TestExceptionResponseCode is another class for message data, if required.
public TestException(TestExceptionResponseCode testExceptionResponseCode) {
    super(testExceptionResponseCode.getMessage());
    this.code = testExceptionResponseCode.getCode();
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getDetailMessage() {
    return detailMessage;
}

public void setDetailMessage(String detailMessage) {
    this.detailMessage = detailMessage;
}

}

Теперь в вашем случае исключение может быть таким:

class Abc {
ResponseEntity<String> = response;
static final String url = "https://abc-xyz.com/client-rest-end-point-url";
public ResponseEntity getDetails(RequestInput requestInput) {
       if(requestInput==null){
          throw new TestException("FAILED", "1", "Data can't be null");
    }

}

0 голосов
/ 01 июля 2019

Аннотируйте ваш метод с помощью аннотации @ExceptionHandler. Вы можете кодировать в отдельном классе от контроллера.

@ControllerAdvice
public class YourExceptionHandler {

@ExceptionHandler(CustomException.class)
public String xException() {
 return "error/exception";
}
}
...