springboot如何使用aop

一些乱七八糟的技巧吧
import org.hibernate.validator.constraints.NotEmpty;
@NotEmpty(message = “姓名必填”)

 @PostMapping("/create")
    public ResultVO<Map<String, String>> create(@Valid OrderForm orderForm,
                                                BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            log.error("【创建订单】参数不正确, orderForm={}", orderForm);
            throw new SellException(ResultEnum.PARAM_ERROR.getCode(),
                    bindingResult.getFieldError().getDefaultMessage());
        }

@Min(value=18,message=”未成年进制入内”)
Private int age;//这样可以拦截,然后再controller中,参数对象前面加@Valid注解,错误信息会放在BindingResult bindResult这个对象里
(@Valid Girl girl,BindingResult bindResult){
if(bindResult.hasErrors()){
system.out.println(bindResult.getFieldError.getDefaultMessage());
}
}
@JsonIgnore加在属性值上在转为json时忽略该属性
@DynamicUpdate加在类上,就是数据库字段设置为timestamp类型时,createtime和updatetime会自动更新
public class ProductInfo {

下面是真正使用aop步骤
maven依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
   <version>1.5.3.RELEASE</version>
</dependency>

package com.imooc.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

//todo boke
@Aspect
@Component
@Slf4j
public class HttpAspect {
    /**
     * 这样不用在每个before , after上面都写一次路径了
     */
    @Pointcut("execution(public * com.imooc.controller.HelloController.*(..))")
    public void log(){
    }

    @Before("log()")
    public void doBefore(JoinPoint joinPoint){

        /**
         * HttpServletRequest  javax.servlet.http.HttpServletRequest;
         */
        ServletRequestAttributes attributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request=attributes.getRequest();
        //url
        log.info("url={}",request.getRequestURL());
        //method
        log.info("method={}",request.getMethod());
        //ip
        log.info("ip={}",request.getRemoteAddr());
        //获取请求的哪个类的哪个方法
        log.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
        //参数
        log.info("args={}",joinPoint.getArgs());
        System.out.println("before");
    }

    @After("log()")
    public void logAfter(){
        System.out.println("after");
    }

    /**
     * 获取切点方法的返回值
     * @param object
     */
    @AfterReturning(returning = "object",pointcut = "log()")
    public void doAfterReturning(Object object){
        log.info("response={}",object);
    }
}

猜你喜欢

转载自blog.csdn.net/sinat_36748650/article/details/89333361