控制器异常处理:
@ResponseStatus(value=HttpStatus.NOT_FOUND)
public class StaffNotFoundException extends Exception {
}
自定义StaffNotFoundException异常类:员工信息没有找到异常。
@ResponseStatus(value=HttpStatus.NOT_FOUND)作用是将该异常映射为http 404异常,就是浏览器接受到的是404错误。
@Controller
@RequestMapping("/")
public class PCInfoController {
@Autowired
PCInfoRestClient PCInfoRestClient;
/**
* 个人信息页面
* @param
* @return
* @throws StaffNotFoundException
*/
@RequestMapping(value="info",method=RequestMethod.GET)
public String staffInfo(Model model) throws StaffNotFoundException {
HashMap staff = PCInfoRestClient.getStaff();
if(staff == null)
throw new StaffNotFoundException();
model.addAttribute("staff", staff);
return "info";
}
@RequestMapping(value="staff/notfound",method=RequestMethod.GET)
public String error(Model model)
{
return "error";
}
}
控制器中如果获得staff是null 则抛出StaffNotFoundException异常。
@ControllerAdvice
public class CommonExceptionHandler {
@ExceptionHandler(StaffNotFoundException.class)
public String handleStaffNotFound(Exception exception, WebRequest request)
{
return "redirect:/staff/notfound";
}
}
@controllerAdvice注解的CommonExceptionHandler 类中,handleStaffNotFound()方法上加了@ExceptionHandler(StaffNotFoundException.class)注解,表示处理当控制器抛出StaffNotFoundException异常时,将会委托该方法来处理。
@controllerAdvice最为实用的一个场景就是将所有@ExceptionHandler方法收集到一个类中,这样所有的异常都能在一个地方进行一致处理。
@ControllerAdvice默认所有控制的抛出的异常都会在这个类进行处理
@ControllerAdvice(annotations = {PCInfoController .class}) 配置你需要拦截的控制器,
@ControllerAdvice(basePackages = "com.demo") 配置你需要路径下的控制器