Spring Rest中与JAX-RS WebApplicationException等价的异常处理方案
Spring中替代JAX-RS
WebApplicationException的异常处理方案 直接使用Spring自带的ResponseStatusException(最便捷)
Spring 5及以上版本提供了ResponseStatusException,可以直接替代JAX-RS的WebApplicationException,无需修改接口返回类型(保持返回字符串即可)。
替换后的代码:
if(file == null) { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not Found"); }
Spring会自动捕获这个异常,将响应状态码设为404,并把消息体返回给客户端,完全符合你的需求,且改造工作量极小。
自定义异常+全局异常处理器(适合统一管理多场景)
如果需要统一管理多种业务异常场景,可以自定义异常类配合全局处理器:
- 自定义异常类:
public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); } }
- 编写全局异常处理器:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } }
- 接口中抛出异常:
if(file == null) { throw new ResourceNotFoundException("Not Found"); }
这种方式适合后续扩展更多异常场景,统一处理响应格式。
两种方案都不需要修改原有接口的返回类型(保持返回字符串),对比你提到的ResponseEntity方式,能大幅减少改造工作量。
内容的提问来源于stack exchange,提问作者GC_
相关产品推荐
相关产品推荐

