1.全局异常处理

@ControllerAdvice
public class MyCustomException {
    @ExceptionHandler
    public void myexception(Exception e, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.write("全局异常");
        out.flush();
        out.close();
    }
}

处理全局异常通过两个注解:@ControllerAdvice、@ExceptionHandler() 实现
我们可以选择在@ExceptionHandler中指明相应的异常,也可以不填,在不指明不指明异常类时,注解会自动映射相应的异常

2.全局数据

@ControllerAdvice
public class GlobalData {
    @ModelAttribute(value = "info")
    public Map<String,Object> mydata(){
        Map<String, Object> map = new HashMap<>();
        map.put("name","lapponia");
        map.put("address","地址");
        return map;
    }
}

其中@ModelAttribute中指定的value是这个全局数据所存在的map的key
一个获取全局数据的例子:

@RestController
public class HelloController {
    @GetMapping("/hello")           // 获取全局数据
    public String hello(Model model){
        Map<String, Object> map = model.asMap();
        Set<String> set = map.keySet();
        for (String key : set) {
            System.out.println(key+":"+map.get(key));
        }
        return "hello";
    }
}

3.请求参数预处理

@InitBinder("a")
public void InitA(WebDataBinder binder) {
    binder.setFieldDefaultPrefix("a.");
}

@InitBinder("b")
public void InitB(WebDataBinder binder) {
    binder.setFieldDefaultPrefix("b.");
}

意在拦截前缀为a.和b.的值

@RestController
public class Xxxxxx {
    @PostMapping("/xxxx")
    public void xxXxx(@ModelAttribute("a") Xx x,@ModelAttribute("b") Y y){
        System.out.println(x.toString());
        System.out.println(y.toString());
    }
}

当X和Y对象有相同属性名的时候,前端传来的相同属性名的属性值会合并在一起,这时我们可以在前端分别为两个属性加上例如a.或b.的前缀,然后在后端就可以通过以上方法来过滤相应的属性。

Last modification:April 2nd, 2020 at 05:11 pm
If you think my article is useful to you, please feel free to appreciate