<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
兩個小方法,用於解決BeanUtils.copyProperties(x, y);中源物件的值為空問題
1.通過實體註解資料庫欄位為Map的Key,需要的非空值為Value封裝資料
@Override public Map<String, Object> setNodeParamItems(DispatchInfoItem dispatchInfoItem) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Map<String, Object> map = new HashMap<>(); DispatchInfo dispatchInfo = new DispatchInfo(); if (null != dispatchInfoItem) { BeanUtils.copyProperties(dispatchInfoItem, dispatchInfo); } Method[] methods = dispatchInfo.getClass().getDeclaredMethods(); if (methods != null) { for (Method method : methods) { String methodName = method.getName(); if (methodName.startsWith("get")) { Column column = dispatchInfo.getClass().getDeclaredMethod(methodName).getAnnotation(Column.class); Object value = method.invoke(dispatchInfo); if (null != column && StringUtils.isNotBlank(StringHelper.getString(value))) { map.put(column.name(), value); } } } } return map; }
2.根據獲取的值注入;
public void getMethods(DispatchInfo dispatchInfo, Map<String, Object> map) throws Exception { //獲取方法上的註解值 Method[] methods = dispatchInfo.getClass().getDeclaredMethods(); if (methods != null) { for (Method method : methods) { String methodName = method.getName(); if (methodName.startsWith("get")) { Column column = dispatchInfo.getClass().getDeclaredMethod(methodName).getAnnotation(Column.class); if (column != null) { String setMethodName = methodName.replaceFirst("(get)", "set"); Method setMethod = dispatchInfo.getClass().getMethod(setMethodName, method.getReturnType()); ; if (null != map.get(column.name())) { setMethod.invoke(dispatchInfo, map.get(column.name())); } } } } } }
3.根據值進行實際的操作
package org.zkdg.utils.spring.annotations.impl; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.sql.SQLException; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.zkdg.utils.entity.AjaxEntity; import org.zkdg.utils.spring.annotations.NNull; @Aspect @Component /** * * @author 王海明 * @createData 2017年7月13日 上午8:36:23 * @說明 :出了一些空值。。。 */ public class AjaxEntityHandler { // @Pointcut("@annotation(org.zkdg.utils.annotations.AfterHandler)") @Pointcut("@annotation(org.zkdg.utils.spring.annotations.NullValidate)") // @Pointcut("execution(* org.dcexam.*.service.*.*(..))") public void beforeCall() { // service方法呼叫之前,檢測引數,僅限第一個引數, 不能為空值 } /** * service發生異常時呼叫 */ @Pointcut("execution(* org.dcexam.*.service.*.*(..))") public void afterThrowEx() { System.out.println("************nnnnnnnnnnnn*******"); } @Around(value = "beforeCall()") public AjaxEntity doBefore(ProceedingJoinPoint point) throws Throwable { // TODO Auto-generated method stub // 判斷不能為空 Object[] args = point.getArgs(); if (args == null || args[0] == null) { return new AjaxEntity("warning", "未選擇任何資料。。。"); } // 獲取代理物件類方法引數 MethodSignature target = (MethodSignature) point.getSignature(); Annotation[][] annotations = target.getMethod().getParameterAnnotations(); int argsIndex = 0; StringBuilder sb = new StringBuilder(); for (Annotation[] annotation : annotations) { NNull nn = (NNull) annotation[0]; String[] descs = nn.desc(); String[] fields = nn.field(); if (fields.length > 0 && fields.length > 0 && descs.length == fields.length) { for (int i = 0; i < fields.length; i++) { Field field = args[argsIndex].getClass().getDeclaredField(fields[i]); // 允許存取 field.setAccessible(true); Object object = field.get(args[argsIndex]); if (object == null) { sb.append(descs[i]).append("不能為空。。。<br>"); } if (object instanceof String) { String string = (String) object; if (string.trim().length() == 0) sb.append(descs[i]).append("不能為空。。。<br>"); else if (string.trim().equals("0")) sb.append("未選擇" + descs[i] + "。。。<br>"); } else if (object instanceof Number) { Integer integer = (Integer) object; if (integer == 0) sb.append("未選擇" + descs[i] + "。。。<br>"); } } if (sb.length() > 0) return AjaxEntity.ERROR(sb.toString()); } argsIndex++; } // 加上@Nullvalidate 註解,不允許出現空 值 for (Object obj : args) { if (obj == null) { return AjaxEntity.WARNING("出現了不允許的空值"); } else if (obj instanceof String) { if (((String) obj).length() == 0) { return AjaxEntity.WARNING("出現了不允許的空值"); } } } AjaxEntity ajax = (AjaxEntity) point.proceed(args); return ajax == null ? AjaxEntity.ERROR("操作失敗") : ajax; } /** * * @param joinPoint * 連線點 * @param ex * 異常 * @return AjaxEntity 異常資訊 */ @AfterThrowing(value = "afterThrowEx()", throwing = "ex") public void doAfterThrowEx(JoinPoint joinPoint, Exception ex) { AjaxEntity ajax = new AjaxEntity(); if (ex.getCause() instanceof SQLException) { // 資料庫操作異常 ajax = AjaxEntity.ERROR("運算元據庫時出現異常"); } } }
另外,java 命名時 。屬性最好不要有下劃線,否則可能會粗錯。。。。。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45