spring boot空属性赋值问题与aspect日志实现方法
更新时间:2020年08月06日 09:58:14 作者:jigsaw6213
这篇文章主要介绍了spring boot空属性赋值问题与aspect日志实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
空属性赋值问题
MyBeanUtils类
public class MyBeanUtils { public static String[] getNullPropertyNames(Object source){ BeanWrapper beanWrapper=new BeanWrapperImpl(source); PropertyDescriptor[] pds=beanWrapper.getPropertyDescriptors(); List<String> nullPropertyNames=new ArrayList<>(); for (PropertyDescriptor pd:pds){ String propertyName=pd.getName(); if(beanWrapper.getPropertyValue(propertyName)==null){ nullPropertyNames.add(propertyName); } } return nullPropertyNames.toArray(new String[nullPropertyNames.size()]); } }
在NewServiceImpl中对updateNew方法进行修改
@Override public News updateNew(Long id, News news) { News news1=newRepository.findById(id).orElse(null); if(news1==null){ // System.out.println("未获得更新对象"); throw new NotFoundException("该新闻不存在"); } //更新后传入的news复制给news1,查找更新数据news中空值属性,忽略不复制给news1 BeanUtils.copyProperties(news,news1, MyBeanUtils.getNullPropertyNames(news)); news1.setUpdateTime(new Date()); return newRepository.save(news1); }
日志打印
新建一个LogAspect类
@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("_____________________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 className, Object[] args) { this.url = url; this.ip = ip; this.classMethod = className; this.args = args; } @Override public String toString() { return "Requestlog{" + "url='" + url + '\'' + ", ip='" + ip + '\'' + ", classMethod='" + classMethod + '\'' + ", args=" + Arrays.toString(args) + '}'; } } }
效果展示
总结
到此这篇关于spring boot空属性赋值问题与aspect日志实现方法的文章就介绍到这了,更多相关spring boot空属性赋值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
springboot+springsecurity如何实现动态url细粒度权限认证
这篇文章主要介绍了springboot+springsecurity如何实现动态url细粒度权限认证的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06java web开发中大量数据导出Excel超时(504)问题解决
开发测试时候导入数据遇到大数据导入的问题,整理了下,需要的朋友可以参考下2017-04-04解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法
这篇文章主要介绍了解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08Java8默认方法Default Methods原理及实例详解
这篇文章主要介绍了Java8默认方法Default Methods原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-01-01关于java.lang.NumberFormatException: null的问题及解决
这篇文章主要介绍了关于java.lang.NumberFormatException: null的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-09-09
最新评论