基于spring boot实现空属性赋值和aspect日志
2020-08-04 22:24
2256 查看
1. 空属性赋值问题
新增工具类
MyBeanUtils
package com.zr0726.news.util; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import java.beans.PropertyDescriptor; import java.util.ArrayList; import java.util.List; public class MyBeanUtils { public static String[] getNullPropertyName(Object source){ BeanWrapper beanWrapper = new BeanWrapperImpl(source); PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors(); List<String> nullPropertyName = new ArrayList<>(); for (PropertyDescriptor pd:pds){ String propertyName = pd.getName(); if (beanWrapper.getPropertyValue(propertyName)==null){ nullPropertyName.add(propertyName); } } return nullPropertyName.toArray(new String[nullPropertyName.size()] ); } }
2.aspect日志
新建aspect包
LogAspect
package com.zr0726.news.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; @Aspect @Component public class LogAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Pointcut("execution(* com.zr0726.news.web.*.*(..))") public void log(){ } @Before("log()") public void doBefore(JoinPoint joinPoint){ //获取request ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //获得url和ip String url = request.getRequestURL().toString(); String ip = request.getRemoteAddr(); String classMethod = joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); RequestLog requestLog = new RequestLog(url,ip,classMethod,args); logger.info("Request : {}",requestLog); logger.info("--------doBefore--------"); } @After("log()") public void doAfter(){ logger.info("--------doAfter--------"); } @AfterReturning(returning = "result",pointcut = "log()") public void adAfterReturn(Object result){ logger.info("Result : {}",result); } private class RequestLog{ private String url; private String ip; private String classMethod; private Object[] args; public RequestLog(String url, String ip, String classMethod, Object[] args) { this.url = url; this.ip = ip; this.classMethod = classMethod; this.args = args; } @Override public String toString() { return "RequestLog{" + "url='" + url + '\'' + ", ip='" + ip + '\'' + ", classMethod='" + classMethod + '\'' + ", args=" + Arrays.toString(args) + '}'; } } }
相关文章推荐
- spring boot空属性赋值问题+aspect日志
- 详解基于SpringBoot使用AOP技术实现操作日志管理
- spring boot 基于AOP实现操作日志记录
- 基于logback 实现springboot超级详细的日志配置
- SpringBoot 使用@Aspect进行日志管理(基于反射代理模式+注解Log)
- SpringBoot 使用@Aspect进行日志管理(基于反射代理模式)
- springboot 基于Aop实现自定义日志管理
- 基于Spring的AOP实现自定义annotation操作日志
- 基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
- 基于Spring Boot和Cloud Foundry实现微服务架构学习(2017227更新)
- Spring boot + thymeleaf 后端直接给onclick函数赋值的实现代码
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于Spring Boot和Spring Cloud实现微服务架构学习
- 基于Spring Boot和Spring Cloud实现微服务架构学习(四)-Spring Cloud总结
- 基于Spring Boot和Spring Cloud实现微服务架构学习(五)-Docker总结
- SpringBoot使用logback实现日志按天滚动
- springboot实现将配置文件的属性转换成一个对应的pojo对象的属性
- 基于springboot+vue+element+ueditor实现前后端分离的富文本框实现