找不到图像的Spring MVC ResponseEntity

kokeuurv  于 2023-05-27  发布在  Spring
关注(0)|答案(1)|浏览(188)

在SpringMVC中,我试图用适当的响应来处理“找不到图像”的情况,但到目前为止还没有成功。当catch块执行时,在Chrome浏览器中我得到状态“(failed)net::ERR_HTTP_RESSPONSE_CODE_FAILURE”。我猜这是因为空字节数组不能是一个图像。
如果我想避免一些通用的“无照片”图像,我应该返回什么响应?

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

ie3xauqp1#

我个人会在一个单独的类中处理所有错误,这个类用于捕获所有错误并返回正确的状态码。查看@ControllerAdvice-annotation。还有更多的可能性,如何处理你的例外。
在你的例子中,你需要从你的get方法中删除try catch块,并创建一个新的类来处理ImageNotFoundException:

@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() );        
}
@ControllerAdvice
public class DefaultControllerResponseAdvise {
    @ExceptionHandler(ImageNotFoundException.class)
    public ResponseEntity<ProblemDetail> handleImageNotFoundException (ImageNotFoundException ex) {
        return ResponseEntity.notFound().build();
    }
}

相关问题