之前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); }
文章评论