1.Add files
2.DimName annotation, entity use
package annotation; import MateTypeEnum; import java.lang.annotation.*; /** * Dictionary translation annotations * * @author pw */ @Documented @Target(ElementType.FIELD)//Can be used on method names @Retention(RetentionPolicy.RUNTIME)// Valid at runtime public @interface DimName {<!-- --> /** * This field represents the encoding of the dictionary type */ //Class clazz() default this.clazz(); Class<? extends Enum<?>> clazz() default MateTypeEnum.class; String type() default "";//DIM-dimension ""-constant /** * The name of the mapped field, if not, the current field value will be overwritten. */ String fieldName() default ""; }
3.DimVerify annotation
package annotation; import java.lang.annotation.*; /** * @author pw */ @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface DimVerify {<!-- --> }
3.DimVerifyAspect, aop aspect
package aop; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @Aspect @Component @Slf4j public class DimVerifyAspect {<!-- --> @AfterReturning(value = "@annotation( com.mdfp.dim.sdk.annotation.DimVerify)", returning = "obj") public void doAround(Object obj) throws Throwable {<!-- --> this.getDictValue(obj); } private void getDictValue(Object data) throws Throwable {<!-- --> if (null == data) {<!-- --> return; } List<Object> list; if (data instanceof List) {<!-- --> list = (List) data; } else if (data instanceof Pagination) {<!-- --> list = ((Pagination) data).getData(); } else if (data instanceof IPage) {<!-- --> list = ((IPage) data).getRecords(); } else {<!-- --> list = new ArrayList<>(); list.add(data); } if (null == list || list.size() == 0) {<!-- --> return; } //Reflection gets the attributes in the returned date Class<?> clazz = list.get(0).getClass(); Field[] fieldArr = clazz.getDeclaredFields(); // Get the bytecode object of the parent class for (Object object : list) {<!-- --> for (Field field : fieldArr) {<!-- --> //Get attribute type if (field.isAnnotationPresent(DimName.class)) {<!-- --> DimName dimName = field.getAnnotation(DimName.class); String methodeName = dimName.fieldName();//Default field name if (ObjectUtil.isEmpty(methodeName)) {<!-- --> methodeName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); } Object fileldDataO = ReflectionUtils.invokeMethod(object, "get" + methodeName, new Class[]{<!-- -->}, new Object[]{<!-- -->});//Get the value if (ObjectUtil.isNotEmpty(fileldDataO)) {<!-- --> Class<Enum> dimNameClazz = (Class<Enum>) Class.forName(dimName.clazz().getName()); String type = dimName.type();//DIM-dimension ""-constant if (type.equals("DIM")) {<!-- --> MdfpBaDimObjectDTO mdfpBaDimObjectDTO = DimUtils.getBaDimObjectById(fileldDataO.toString()); if (mdfpBaDimObjectDTO != null) {<!-- --> setDimNameData(object, methodeName, mdfpBaDimObjectDTO.getObjectName()); } } else {<!-- --> Enum[] objects = dimNameClazz.getEnumConstants(); try {<!-- --> Method getCode = dimNameClazz.getMethod("getCode"); Method getAlias = dimNameClazz.getMethod("getAlias"); for (Enum e : objects) {<!-- --> Object eCode = getCode.invoke(e); String eName = e.name(); if ((eName.contains(methodeName) || eName.contains(DataUtils.camelToUnderline(methodeName))) & amp; & amp; ObjectUtil.isNotEmpty(eCode)) {<!-- --> if (eCode.toString().equals(fileldDataO.toString())) {<!-- --> setDimNameData(object, methodeName, getAlias.invoke(e)); } } } } catch (Exception e) {<!-- --> log.error("The enumeration type does not have a getCode or getAlias method"); } } } } } } } public void setDimNameData(Object object, String methodName, Object data) {<!-- --> Method method = null; try {<!-- --> method = object.getClass().getMethod("set" + methodeName + "Name", String.class); if (ObjectUtil.isNotEmpty(data)) {<!-- --> method.invoke(object, data.toString()); } } catch (NoSuchMethodException e) {<!-- --> throw new RuntimeException(e); } catch (InvocationTargetException e) {<!-- --> throw new RuntimeException(e); } catch (IllegalAccessException e) {<!-- --> throw new RuntimeException(e); } } }
4. Entity use
@DimName(clazz = AbDiApiEnum.class) private String interfaceType;//interface type
@DimName() private String state;//state
5.aop usage
@Override @DimVerify public IPage<MdfpAbDiApiDTO> selectMaxApiPage(MdfpAbDiApiQueryVO mdfpAbDiApiQueryVO, Integer pageIndex, Integer pageRows) {<!-- --> return mdfpAbDiApiMapper.selectMaxApiPage(new Page(pageIndex, pageRows), mdfpAbDiApiQueryVO); }
@ApiOperation(value = "Query the latest version of the interface API paging list", notes = "Query the latest version of the interface API paging list", httpMethod = "GET") @ApiResponses(@ApiResponse(code = 800, message = "ok")) @PostMapping(value = "/selectMaxApiPage") @DimVerify public ResponseData<Pagination<MdfpAbDiApiDTO>> selectMaxApiPage(@RequestBody PaginationRequestData<MdfpAbDiApiQueryVO> requestData) {<!-- --> Pagination<MdfpAbDiApiDTO> mdfpAbDiApiDTOPage = mdfpAbDiApiPolyService.selectMaxApiPage(requestData.getParams(), requestData.getPageIndex(), requestData.getPageRows()); return new ResponseData<>(StatusCodeEnum.SUCCESS_CODE.getStatusCode(), mdfpAbDiApiDTOPage, "Query successful", LanguageEnum.GENERAL_QUERY_SUCCESS.getCode(), new Object[]{<!-- -->}); }