1.对个Controller的异常处理
某个Controller
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void processMethod(MissingServletRequestParameterException ex,HttpServletRequest request ,HttpServletResponse response) throws IOException {
System.out.println("抛异常了!"+ex.getLocalizedMessage());
logger.error("抛异常了!"+ex.getLocalizedMessage());
response.getWriter().printf(ex.getMessage());
response.flushBuffer();
}
这样,如果当前controller抛出MissingServletRequestParameterException异常,会被方法捕获,并执行方法体 @ExceptionHandler(Class<? extends Throwable>[] value() default {})可以预定义多个异常
2.如果想在所有的Controller里面统一处理异常的话,可以用@ControllerAdvice来创建一个专门处理的类。
WebExceptionHandler.class
ExceptionConfig.class
exception.properties
@ControllerAdvice
@ResponseBody
public class WebExceptionHandler {
@Autowired
private ExceptionConfig exceptionConfig;
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Result<String> globalException(HttpServletRequest request, Throwable ex) {
Pair<Integer,String> pair = exceptionConfig.getCodeMessage(ex.getClass().getSimpleName());
if(pair != null) {
return Result.error(pair.getKey(), pair.getValue());
}else {
return Result.error(400, ex.getClass().getName());
}
}
}
@Configuration
@Data
@ConfigurationProperties
@PropertySource("classpath:exception.properties")
public class ExceptionConfig {
private Map<String, String> exception = new HashMap<>(4);
private Map<String, Pair<Integer, String>> cache = new HashMap<>(4);
public Pair<Integer, String> getCodeMessage(String name){
if(cache.containsKey(name)){
return cache.get(name);
}else {
String value = exception.get(name);
if (value != null) {
String[] split = value.split(":");
Integer code = Integer.valueOf(split[0]);
Pair<Integer, String> pair = ImmutablePair.of(code, split[1]);
cache.put(name, pair);
return pair;
}
}
return null;
}
}
exception.properties
exception.ChargingNetworkNonexistException=10000:充电网络handle对象不存在
exception.UserLockException=10001:账号已被锁定,请联系管理员!
exception.DeleteErrorException=10002:删除失败,目标数据不存在