SpringBoot统一异常处理

来源Spring Boot - Exception Handlinghttps://www.tutorialspoint.com/spring_boot/spring_boot_exception_handling.htm

总体思路

  1. 使用注解@ControllerAdvice注入统一处理异常的类
  2. 使用注解@ExceptionHandler注入处理指定异常的方法
  3. 其他地方入controller throw出异常后,该异常对应的ExceptionHandler注解方法会处理抛出的异常

异常触发流程

SpringBoot工程中抛出异常,异常处理类中对应异常处理方法收到上述触发的异常,然后对该异常进行统一处理。

  • 异常类可以自定义处理,也可以使用java.lang中的异常类进行处理。
  • SpringBoot自动管理的Bean(@Controller层,@Service层,@Component等)抛出异常,以及自定义工具类抛出的异常,都可以在统一异常处理类中得到捕获。

异常处理类

@ControllerAdvice
public class ProductExceptionController {

	
	@ExceptionHandler(value = ProductNotfoundException.class)
	public ResponseEntity<Object> exception(ProductNotfoundException exception) {
		return new ResponseEntity<>("Product not found,id: "+exception.getId(), HttpStatus.NOT_FOUND);
	}
}

自定义异常类

public class ProductNotfoundException extends RuntimeException{
	private static final long serialVersionUID = 1L;
	private String id;
	public ProductNotfoundException() {}
	public ProductNotfoundException(String id) {
		this.setId(id);
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
}

Controller类


@RestController
@RequestMapping(value = "/api")
public class ProductServiceController {
	private static Map<String, Product> productRepo = new HashMap<>();
	   static {
	      Product honey = new Product();
	      honey.setId("1");
	      honey.setName("Honey");
	      productRepo.put(honey.getId(), honey);
	      
	      Product almond = new Product();
	      almond.setId("2");
	      almond.setName("Almond");
	      productRepo.put(almond.getId(), almond);
	   }
	   
   @RequestMapping(value = "/products/", method = RequestMethod.PUT,consumes = "application/json")
   public ResponseEntity<Object> updateProduct(@RequestBody Product product) { 
	   String id = product.getId();
      if(!productRepo.containsKey(id))throw new ProductNotfoundException(id);
      productRepo.remove(id);
      product.setId(id);
      productRepo.put(id, product);
      return new ResponseEntity<>("Product is updated successfully", HttpStatus.OK);
   }
	@RequestMapping(value = "/producer",method = RequestMethod.GET)
	public Integer producer() {
		System.out.print("--------");
		return 1;
	}

   
}

前端请求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值