之前SpringBoot项目中Controller输出图片,使用的是@ResponseBody 返回byte[]数组,不过发现接口调用返回了500错误,Internal Server Error,但是后台代码不报任何错误。
经过调查,之前配置Spring使用的是WebMvcConfigurerAdapter,因为文档说这个类已经过时,用WebMvcConfigurationSupport取代了,换回WebMvcConfigurerAdapter就恢复正常了。
以上是一种解决方案,不过既然WebMvcConfigurerAdapter已经过时了,我还是不想用过时的类,决定还是使用最新的WebMvcConfigurationSupport,经过一番研究,使用如下方式来实现输出图片:
配置WebMvcConfigurationSupport
@Configuration
public class MyConfiguration extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteArrayHttpMessageConverter());
super.configureMessageConverters(converters);
}
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
arrayHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());
return arrayHttpMessageConverter;
}
private List<MediaType> getSupportedMediaTypes() {
List<MediaType> list = new ArrayList<>();
list.add(MediaType.IMAGE_JPEG);
list.add(MediaType.IMAGE_PNG);
list.add(MediaType.APPLICATION_OCTET_STREAM);
return list;
}
}
只要作用是设置HttpMessageConverter,让SpringBoot识别ResponseEntity<byte[]>作为图片的输出。
Controller输出图片示例
/**
* 读取并输出图片
*/
@ApiOperation("读取附件图片")
@RequestMapping(value = "/image/test.jpg", method = RequestMethod.GET, headers = "Accept=image/*", produces = "image/*")
public ResponseEntity<byte[]> image() throws Exception {
// TODO 测试的图片
byte[] bytes = IOUtils.toByteArray(new FileInputStream(new File("/Users/Terry/Downloads/在线学习网页/20211104_212831_0009.jpg")));
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPG);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
文章评论