You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中图片不存在时的ResponseEntity返回方案咨询

解决Spring MVC中图片不存在时的响应问题

你的问题出在:接口声明返回JPEG类型,但捕获异常时返回了空字节数组+404状态。浏览器期望拿到合法的JPEG数据,空数组不符合图片格式规范,所以触发了报错。以下是几种不需要占位图的解决方案:

方案1:直接返回404状态码,不带响应体

修改catch块的返回逻辑,只返回404状态,不设置响应体:

catch( final ImageNotFoundException e ) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}

这样浏览器会正确识别404状态,不会因为解析空图片数据而报错,符合HTTP规范(404响应允许无响应体)。

方案2:返回404+文本提示(修改Content-Type)

如果需要给用户明确的文本提示,可以修改响应的Content-Type为文本类型,同时返回提示内容:

catch( final ImageNotFoundException e ) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND)
                        .contentType(MediaType.TEXT_PLAIN)
                        .body("图片不存在");
}

这种方式会让浏览器显示文本提示,而不是尝试解析图片,避免报错。

方案3:用注解自动处理异常(更优雅)

给自定义的ImageNotFoundException添加@ResponseStatus注解,让Spring自动处理异常返回404:
首先修改异常类:

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ImageNotFoundException extends RuntimeException {
    public ImageNotFoundException(String message) {
        super(message);
    }
}

然后控制器方法可以去掉catch块,简化代码:

@GetMapping( path = "/{name}", produces = MediaType.IMAGE_JPEG_VALUE )
public ResponseEntity<byte[]> get( @PathVariable("name") String name ) {
    final MyImage img = this.imageService.getImage( name );
    return ResponseEntity
        .ok()
        .contentType( MediaType.IMAGE_JPEG_VALUE )
        .body( img.getBytes() );
}

当imageService.getImage()抛出ImageNotFoundException时,Spring会自动返回404状态码且不带响应体,既简洁又避免浏览器报错。

内容的提问来源于stack exchange,提问作者user1034461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:00:10