По некоторым причинам я не использую глобальный обработчик исключений. Я обрабатываю исключение в той же конечной точке.
Этот API, который я вызываю, отправляет изображение на основе идентификатора. А в случае HTTP NOT FOUND (конкретный идентификатор не найден) он отправляет ответ об ошибке в формате json.
В случае успеха я могу получить изображение. Но если API возвращает ответ об ошибке в json, я получаю
Код: Выделить всё
org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class org.json.simple.JSONObject] with preset Content-Type 'null']
Код: Выделить всё
@GetMapping(value="api/image/{id}" , produces = { MediaType.IMAGE_JPEG_VALUE, MediaType.APPLICATION_JSON_VALUE })
public @ResponseBody ResponseEntity api_image_customer(@PathVariable(name = "id")String id){
String accessToken = getCrmAccessToken();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);
headers.add("Authorization", "Bearer "+accessToken);
ResponseEntity response = null;
HttpEntity formEntity = new HttpEntity(null, headers);
try {
response = restTemplate.exchange("http://172.18.5.19:8082/api/image/"+id, HttpMethod.GET,
formEntity, byte[].class);
if(response!=null && response.getStatusCode().is2xxSuccessful()) {
byte[] imageBytes = response.getBody();
return new ResponseEntity(imageBytes, HttpStatus.OK);
}
else if(response!=null && !response.getStatusCode().is2xxSuccessful()){
return new ResponseEntity(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
else
{
return new ResponseEntity("ERROR", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
catch(HttpClientErrorException ex) {
String msg = ex.getResponseBodyAsString();
System.out.println(msg+" !!!!"); // this is getting printed as json string.
JSONParser parser =new JSONParser();
JSONObject obj = null;
try {
obj = (JSONObject)parser.parse(msg);
}catch(Exception ex_) {
ex_.printStackTrace();
return new ResponseEntity("error converting json", HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity(obj, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Есть ли способ управлять обоими типами ответов здесь, например динамически изменять тип содержимого ответа.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-a-rest