Estou recebendo dados de imagem (as byte[]
) do DB. Como retornar esta imagem em@ResponseBody
?
EDITAR
Eu fiz isso sem @ResponseBody
usar HttpServletResponse
como parâmetro de método:
@RequestMapping("/photo1")
public void photo(HttpServletResponse response) throws IOException {
response.setContentType("image/jpeg");
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
IOUtils.copy(in, response.getOutputStream());
}
Usar @ResponseBody
com org.springframework.http.converter.ByteArrayHttpMessageConverter
conversor registrado como o @Sid disse não funciona para mim :(.
@ResponseBody
@RequestMapping("/photo2")
public byte[] testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
return IOUtils.toByteArray(in);
}
fonte
Além de registrar um
ByteArrayHttpMessageConverter
, você pode usar um emResponseEntity
vez de@ResponseBody
. O código a seguir funciona para mim:fonte
Usando o Spring 3.1.xe 3.2.x, é assim que você deve fazer:
O método do controlador:
E a anotação mvc no arquivo servlet-context.xml:
fonte
Além de algumas respostas, aqui estão algumas dicas (Primavera 4.1).
Caso você não tenha nenhum conversor de mensagens configurado no seu WebMvcConfig,
ResponseEntity
o@ResponseBody
funcionamento interno é bom.Se sim, ou seja, você tem um
MappingJackson2HttpMessageConverter
configurado (como eu) usando osResponseEntity
retornos aorg.springframework.http.converter.HttpMessageNotWritableException
.A única solução de trabalho nesse caso é envolver um
byte[]
no@ResponseBody
seguinte maneira:Nesse caso, lembre-se de configurar os
ByteArrayHttpMessageConverer
conversores de mensagens corretamente (e adicione a ) no seu WebMvcConfig, da seguinte maneira:fonte
No contexto do seu aplicativo, declare AnnotationMethodHandlerAdapter e registerByteArrayHttpMessageConverter:
também no método manipulador, defina o tipo de conteúdo apropriado para sua resposta.
fonte
Trabalhou Para Mim.
fonte
Eu prefiro este:
Altere o tipo de mídia para qualquer formato de imagem que você tenha.
fonte
ResourceLoader
, mas a construção de um caminho de entrada externa como no seu exemplo é uma má idéia: cwe.mitre.org/data/definitions/22.htmlÉ um trabalho para mim na primavera 4.
fonte
Como nenhuma das respostas funcionou para mim, consegui fazer o seguinte:
Definindo o
Content-Disposition
cabeçalho Consegui baixar o arquivo com a@ResponseBody
anotação no meu método.fonte
Você deve especificar o tipo de mídia na resposta. Estou usando uma anotação @GetMapping com produz = MediaType.IMAGE_JPEG_VALUE. @RequestMapping funcionará da mesma maneira.
Sem um tipo de mídia, é difícil adivinhar o que realmente é retornado (inclui quem lê o código, o navegador e, é claro, o próprio Spring). Um byte [] simplesmente não é específico. A única maneira de determinar o tipo de mídia de um byte [] é farejar e adivinhar.
Fornecer um tipo de mídia é apenas uma prática recomendada
fonte
É assim que eu faço com Spring Boot e Guava:
fonte
Na primavera 4, é muito fácil você não precisar fazer alterações nos feijões. Marque apenas o seu tipo de retorno como @ResponseBody.
Exemplo:-
fonte
Eu acho que você talvez precise de um serviço para armazenar o upload de arquivos e obter esse arquivo. Verifique mais detalhes em aqui
1) Crie um serviço de armazenamento
2) Crie o Rest Controller para fazer upload e obter arquivo
}
fonte