Как обрабатывать несколько типов мультимедиа ответа внутри, производит во время вызова шаблона отдыхаJAVA

Программисты JAVA общаются здесь
Anonymous
Как обрабатывать несколько типов мультимедиа ответа внутри, производит во время вызова шаблона отдыха

Сообщение Anonymous »

Я вызываю API, используя шаблон отдыха. Этот API может возвращать либо байт изображения[], либо объект ошибки в формате json
По некоторым причинам я не использую глобальный обработчик исключений. Я обрабатываю исключение в той же конечной точке.
Этот 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']
ниже приведен код вызова API с использованием шаблона rest.

Код: Выделить всё

@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);

}
}
Я надеялся, что несколько записей MediaType внутри создают атрибут @GetMapping будут обрабатывать оба типа ответов, то есть изображение, а также json< /код>. Но этого не происходит.
Есть ли способ управлять обоими типами ответов здесь, например динамически изменять тип содержимого ответа.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ing-a-rest

Вернуться в «JAVA»