spring-boot学习笔记(3)

来源:互联网 发布:sql获取整数位数 编辑:程序博客网 时间:2024/06/16 10:08

一表单验证

  1. 在entity类的属性中加入注解
    @Min(value=18, message="未成年禁止入内")
  2. controller方法参数中加入
     
    pulic Girl girlAdd(@Valid Girl girl,BindingResult bindingResult){
    if(bindingResult.hasErrors()){
    System.out.println(bindingResult.getFieldError().getEdfaultMessage())
    }
    }

二 AOP统一处理请求日志

  1. AOP面向切面,是一种编程范式,与语言无关,是一种程序设计思想
  2. 只有登陆之后才能进行操作的实现方法
    a. 在pom文件中添加依赖
    <artifactId>spring-boot-starter-aop</artifactId>
    b. 新建一个处理Java Class文件 添加注解@Aspect @Component
    @Before("execution(public * com.cn.controller.GirlController.方法名(..))")
    请求某个方法之前做该操作
    public void log(){在该方法之前进行操作} 还有After方法
  3. 对b进行优化
     
    @Pointcut(execution(public * com.cn.controller.GirlController.方法名(..))
    public void log(){}
    @Before("log")
    public void doBefore(){}

三 log的使用

  1. 在HttpAspect文件中
    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class); 参数为所在类的类名
    logger.info(“标注内容”) 写入日志的信息

四 获取访问某个方法的请求信息

  1. 在public void doBefore()传入参数JoinPoint joinPoint

    ServletRequestAttributes attributes =(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();logger.info("url={}", request.getRequestURL()); URLlogger.info("method={}", request.getMethod()); GET PUTlogger.info(""ip={},request.getRemoteAddr()); ip地址logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()) 类名logger.info("class_arguement={}",joinPoint.getArgs());
  2. 获取某个方法返回的信息

    @AfterReturning(returning="object", pointcut="log()")public void doAfterReturning(Object object){logger.info("response={}",object.toString()); 需要函数返回的对象有toString 方法}

五.统一异常处理

  1. 新建一个Result 类,类中写上code ,msg,data三个属性
  2. 写一个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;
    }
  3. 调用
    if(bindingResult.hasErros()){  
    return ResultUtil.error("404",bindingResult.getFieldError().getDefaultMessage();
    }
    .....
    return Result.success(girlRepository.save(girl));

六.异常捕获

  1. 定义一个异常类

    public class GirlException extends RuntimeExpection{ //spring只会回滚RuntimeExpectionprivate Integer code;public GirlException(Integer code,String message){    super(message);    this.code=code;}getCode()/setCode()方法}
  2. 定义一个异常处理类

    public class ExceptionHandle{@ExceptionHandle(value = Exception.class)@ResponseBodypublic Result handle(Exception e){if(e instanceof GirlException){  GirlException girlException = (GirlException) e;    return ResultUtil.error(girlException.getCode(), girlException.getMessage());}else{  return ResultUtil.error(-1,"未知错误");}}
  3. 在service中调用

    public void getAge(Integer id) throws Exception{if(age
原创粉丝点击