Как передать вывод исключения API через собственный REST-сервис?
Сводка: я хочу передать действительный вывод исключений, заданный одной конечной точкой службы 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 ответа
Вы можете создать собственный класс исключений для всего приложения и отправить данные в 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");
}
}
Аннотируйте свой метод с помощью аннотации @ExceptionHandler. Вы можете кодировать в отдельном классе от контроллера.
@ControllerAdvice
public class YourExceptionHandler {
@ExceptionHandler(CustomException.class)
public String xException() {
return "error/exception";
}
}