У нас есть API контроллера остатка с отображением POST, которое принимает объект в качестве параметра запроса и создает его в БД. У нас есть несколько проверок на входном объекте, и если есть какая-либо ошибка, мы генерируем исключение с пользовательским сообщением.
Если мы вызываем этот API из почтового менеджера, мы видим соответствующую ошибку.
Принимая во внимание, что когда мы вызываем это в методе вызова другого приложения с помощью RestTemplate Spring, все, что мы видим, это запрос 400 Bad с пустым телом. Сообщение об ошибке не отображается.
В чем может быть проблема здесь. Как мы можем получить пользовательское сообщение, выброшенное из API.
Вот как мы вызываем API с шаблоном rest.
String url = "https://localhost:8895/servuceUrl";
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<AddRequest> entity = new HttpEntity<AddRequest>(obj, headers);
ResponseEntity<String> data = null;
adddata = restTemplate.exchange(syncurl, HttpMethod.POST, entity, String.class);
И на одной стороне сервера у нас есть исключение, записанное как
@ResponseStatus(value=HttpStatus.BAD_REQUEST)
public class InvalidDataException extends Exception {
public InvalidDataException(String msg) {
super(msg);
}
}
Контроллер выглядит как
@PostMapping(RestUriMappings.POST_MAPPING)
public ResponseDto add(@Valid @RequestBody AddRequest data) throws InvalidDataException
{
logger.debug("Incoming data for add: {}", data.toString());
// validate the payload
if(data.getName()==null)
throw new InvalidDataException("Name shouldnt be null");
}