全局异常处理
/**
可以定义多个方法,不同的方法处理不同的异常。如专门处理空指针的方法,专门处理数组越界……
*/
@ControllerAdvice
public class MyGlobalExceptionHandler{
@ExceptionHandler(Exception.class)//指定异常处理类型
public ModelAndView customException(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("message",e.getMessage());
mv.setViewName("myerror");
return mv;
}
}
/**
处理无效参数的异常
*/
@ControllerAdvice
public class ErrorHandler{
private final Logger log = LoggerFactory.getLogger(getClass());
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void processValidationError(IllegalArgumentException e) {
log.info("Returning HTTP 400 Bad Request", e);
}
}
全局数据绑定
@ControllerAdvice
public class MyGlobalExceptionHandler{
@ModelAttribute(name = "md") //该方法返回的key就是变量名,value就是返回值
public Map<String,Object> mydata(){
HashMap<String,Object> map = new HashMap<>();
map.put("age",99);
map.put("gender","男");
return map;
}
}
/**
获取上面定义的全局数据
*/
@RestController
public class HelloController{
@GetMapping("/hello")
public String hello(Model model){
Map<String,Object> map = model.asMap();
System.out.println(map);
int i = 1 / 0;
return "hello controller advice";
}
}
全局数据预处理
public class Book{
private String name;
private Long price;;
//get、set省略
}
public class Author{
private String name;
private Integer age;
//get、set省略
}
/**
给接口变量取别名,区分两个实体中的相同属性名
*/
@PostMapping("/book")
public void addBook(@ModelAttribute("b") Book book,@ModelAttribute("a") Author author){
System.out.println(book);
System.out.println(author);
}
//请求数据处理
@InitBinder("b")
public void b(WebDataBinder binder){//注解表示该方法用来处理和Book和相关的参数,在方法中,给参数添加一个 b 前缀,即请求参数要有b前缀.
binder.setFieldDefaultPrefix("b.");
}
@InitBinder("a")
public void a(WebDataBinder binder){
binder.setFieldDefaultPrefix("a.");
}
发送请求