spring boot表单验证 及使用AOP处理

一、表单验证

1、当前台传入的参数过多是可以用一个对象来对属性进行接收

@PostMapping(value="/girl")
public Girl addGirl( Girl girl){
   girl.setAge(girl.getAge());
    girl.setCupSize(girl.getCupSize());
    girl.setId(girl.getId());
    Girl save = girlRepository.save(girl);
    return save;
}

前台请求的地址为


2、对对象中的一个属性进行验证

实体类中注解如下:

@Entity
public class Girl {
    @Id
    private Integer id;
    private String cupSize;
    @Min(value =18,message = "未成年少女禁止入内")
    private Integer age;}

controller层如下处理:@Valid, 校验的结果会放在BindingResult 中

@PostMapping(value="/girl")
public Girl addGirl(@Valid Girl girl, BindingResult bindingResult){
    if (bindingResult.hasErrors()){
        System.out.println(bindingResult.getFieldError().getDefaultMessage());
        return null;
    }
   girl.setAge(girl.getAge());
    girl.setCupSize(girl.getCupSize());
    girl.setId(girl.getId());
    Girl save = girlRepository.save(girl);
    return save;
}

二、AOP(通用的方法抽取出来)



1、添加依赖POM

<!--AOP-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
   <optional>true</optional>
</dependency>

2、写通用的Aspect类

里面两个.表示所有的方法里面所有的参数都会拦截

拦截controller里面的所有方法  方法名改为*即可

execution(public * com.springboot.controller.GirlController.girlList(..))

@Aspect
@Component
public class aspect {//
    @Before("execution(public * com.springboot.controller.GirlController.girlList(..))")
    public void log(){
    System.out.println("++++++++++++++++++++++++++++");
    }
}
效果


3、切面

没有切面的话,添加before和after方法需要如下所示

@Aspect
@Component
public class aspect {//里面两个.表示所有的方法里面所有的参数都会拦截
    @Before("execution(public * com.springboot.controller.GirlController.*(..))")
    public void log(){
    System.out.println("++++++++++++++++++++++++++++");
    }
    @After("execution(public * com.springboot.controller.GirlController.*(..))")
    public void log2(){
        System.out.println("---------------------------");
    }
}

显而易见代码重复,加入切面的话(切面就是要增强的方法)

@Aspect
@Component
public class aspect {//里面两个.表示所有的方法里面所有的参数都会拦截
    @Pointcut("execution(public * com.springboot.controller.GirlController.*(..))")
    public void log(){
    }
    @After("log()")
    public void log1(){
        System.out.println("---------------------------");
    }
    @Before("log()")
    public void log2(){
        System.out.println("+++++++++++++++++++++++++++");
    }
}

加入打印日志

@Aspect
@Component
public class HttpAspect {//里面两个.表示所有的方法里面所有的参数都会拦截

     private  final static Logger logger= LoggerFactory.getLogger(HttpAspect.class);
    @Pointcut("execution(public * com.springboot.controller.GirlController.*(..))")
    public void log(){
    }
    @After("log()")
    public void log1(){
        logger.info("++++++++++++++++++++");
    }
    @Before("log()")
    public void log2(){
        logger.info("--------------------");
    }
}

加入打印的请求信息以及返回的对象信息

ServletRequestAttributes servletRequestAttributes= 

(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();

       HttpServletRequest request= servletRequestAttributes.getRequest();

 @AfterReturning(returning = "object",pointcut = "log()")

@Aspect
@Component
public class HttpAspect {//里面两个.表示所有的方法里面所有的参数都会拦截

     private  final static Logger logger= LoggerFactory.getLogger(HttpAspect.class);
    @Pointcut("execution(public * com.springboot.controller.GirlController.*(..))")
    public void log(){
    }
    @After("log()")
    public void log1(){
       ServletRequestAttributes servletRequestAttributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
       HttpServletRequest request= servletRequestAttributes.getRequest();
        //url
        logger.info("url={}",request.getRequestURI());
        //method
        logger.info("method={}",request.getMethod());
        //ip
        logger.info("ip={}",request.getRemoteAddr());
    }
    @Before("log()")
    public void log2(){
        logger.info("--------------------");
    }
    //打印返回的参数
    @AfterReturning(returning = "object",pointcut = "log()")
//returnnig参数就是我们的入参
 public void doAfterReturing(Object object){
logger.info( "response={}" ,object) ; }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值