一表单验证
- 在entity类的属性中加入注解
@Min(value=18, message="未成年禁止入内")
- controller方法参数中加入
pulic Girl girlAdd(@Valid Girl girl,BindingResult bindingResult){
if(bindingResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getEdfaultMessage())
}
}
二 AOP统一处理请求日志
- AOP面向切面,是一种编程范式,与语言无关,是一种程序设计思想
- 只有登陆之后才能进行操作的实现方法
a. 在pom文件中添加依赖
<artifactId>spring-boot-starter-aop</artifactId>
b. 新建一个处理Java Class文件 添加注解@Aspect @Component
@Before("execution(public * com.cn.controller.GirlController.方法名(..))")
请求某个方法之前做该操作
public void log(){在该方法之前进行操作} 还有After方法 - 对b进行优化
@Pointcut(execution(public * com.cn.controller.GirlController.方法名(..))
public void log(){}
@Before("log")
public void doBefore(){}
三 log的使用
- 在HttpAspect文件中
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
参数为所在类的类名
logger.info(“标注内容”) 写入日志的信息
四 获取访问某个方法的请求信息
在public void doBefore()传入参数JoinPoint joinPoint
ServletRequestAttributes attributes =(ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); logger.info("url={}", request.getRequestURL()); URL logger.info("method={}", request.getMethod()); GET PUT logger.info(""ip={},request.getRemoteAddr()); ip地址 logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()) 类名 logger.info("class_arguement={}",joinPoint.getArgs());
获取某个方法返回的信息
@AfterReturning(returning="object", pointcut="log()") public void doAfterReturning(Object object){ logger.info("response={}",object.toString()); 需要函数返回的对象有toString 方法 }
五.统一异常处理
- 新建一个Result 类,类中写上code ,msg,data三个属性
- 写一个ResultUtil 类
public static Result success(Object object){
Result result =new Result();
result.setCode(200);
result.setMsg("成功");
result.setData(object);
return result;
}
public static Result success(){
return success(null);
}
public static Result error(Integer code,String msg){
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
} - 调用
if(bindingResult.hasErros()){
return ResultUtil.error("404",bindingResult.getFieldError().getDefaultMessage();
}
.....
return Result.success(girlRepository.save(girl));
六.异常捕获
定义一个异常类
public class GirlException extends RuntimeExpection{ //spring只会回滚RuntimeExpection private Integer code; public GirlException(Integer code,String message){ super(message); this.code=code; } getCode()/setCode()方法 }
定义一个异常处理类
public class ExceptionHandle{ @ExceptionHandle(value = Exception.class) @ResponseBody public Result handle(Exception e){ if(e instanceof GirlException){ GirlException girlException = (GirlException) e; return ResultUtil.error(girlException.getCode(), girlException.getMessage()); }else{ return ResultUtil.error(-1,"未知错误"); } }
在service中调用
public void getAge(Integer id) throws Exception{ if(age