Как вернуть изображение в Spring REST в браузер

Мне нужно вернуть изображение в мой контроллер Spring. Я пытаюсь ответить в этом Spring MVC: как вернуть изображение в @ResponseBody? но это не работает

мой код такой

@RequestMapping(value = "cabang/photo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<byte[]> getPhoto() throws IOException {

     File imgPath = new File("D:\\test.jpg");

    byte[] image = Files.readAllBytes(imgPath.toPath());
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_JPEG);
    headers.setContentLength(image.length);
    return new ResponseEntity<>(image, headers, HttpStatus.OK);
}

но когда я обращаюсь к нему в браузере, он ничего не показывает (просто нет значка изображения). Но если я прочитаю массив байтов изображения, он не будет пустым. Я что-то пропустил в своем коде?


person first_time_user    schedule 03.11.2015    source источник
comment
Откройте сетевую консоль браузера и проверьте, что содержит ответ. Разместите это здесь.   -  person Sotirios Delimanolis    schedule 03.11.2015
comment
о, похоже, тип все еще «документ». Но я установил его в заголовках, поэтому он должен возвращать изображение. Может я неправильно поставил?   -  person first_time_user    schedule 03.11.2015
comment
То, что у вас сейчас есть, должно правильно установить заголовок типа содержимого. Убедитесь, что ваш метод обработчика вызывается правильно. Обратите внимание, что @ResponseBody не нужен, так как ваш тип возвращаемого значения — ResponseEntity. Убери это.   -  person Sotirios Delimanolis    schedule 03.11.2015
comment
хм.. в шапке ответа тип контента уже image/jpeg, в ответе он не пустой.. типа /9j/4AAQSkZJRgABAQE... но не знаю почему браузер его не показывает. Я могу проверить массив байтов, поэтому я думаю, что метод вызывается   -  person first_time_user    schedule 03.11.2015
comment
Вы решили эту проблему?   -  person Leos Literak    schedule 28.06.2017


Ответы (1)


Ваш код выглядит нормально. Убедитесь, что вы добавили ByteArrayHttpMessageConverter в список преобразователей http-сообщений вашего приложения.

Конфигурация Java:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    ByteArrayHttpMessageConverter byteConverter = new ByteArrayHttpMessageConverter();
    converters.add(byteConverter);
    super.configureMessageConverters(converters);
}
person Bnrdo    schedule 03.11.2015