SpringBoot图片ResponseBody输出byte[],出现500错误的解决

2022-04-17 626点热度 0人点赞 0条评论

之前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);
}

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论