摘要:前言和切面一樣,在項目中同樣使用了自定義注解,目前項目中使用的自定義注解主要分為以下一些方面參數解析,緩存方法聲明,導入功能中的聲明。
前言
和切面一樣,在項目中同樣使用了自定義注解,目前項目中使用的自定義注解主要分為以下一些方面:controller參數解析,緩存方法聲明,導入功能中的POJO聲明。
@JsonObject用在controller的方法參數,解析前臺提交的json參數,組裝成java對象。用法如下:
@PostMapping("/bas/user/status/toggle") public PackVo toggleUserStatus(@JsonObject Long[] userIds , @JsonObject Long status ){ ... }
注解聲明
@Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface JsonObject { String value() default ""; boolean required() default true; }
注解處理,實現HandlerMethodArgumentResolver,
public class JsonArgumentResolver implements HandlerMethodArgumentResolver { public static Logger logger = LoggerFactory.getLogger(JsonArgumentResolver.class); @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.hasParameterAnnotation(JsonObject.class); } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { try { JSONObject para = getRequestInfo(nativeWebRequest); Class> type = methodParameter.getParameterType(); String name = methodParameter.getParameterName(); //獲取參數注解JsonObject,如果為空,則使用參數名,不為空,則使用注解中的value Annotation[] annotations = methodParameter.getParameterAnnotations(); for(Annotation annotation : annotations){ if(annotation instanceof JsonObject){ String value = ((JsonObject) annotation).value(); if(StringUtils.isNotEmpty(value)){ name = value; } } } if (null != para && para.containsKey(name)) { if (String.class.equals(type)) { return para.getString(name); } if (List.class.equals(type)) { String typeName = methodParameter.getGenericParameterType().getTypeName(); typeName = typeName.substring(typeName.indexOf("<")+1); typeName =typeName.substring(0,typeName.length()-1); return JSON.parseArray(para.getString(name), Class.forName(typeName)); } return JSON.parseObject(para.getString(name), type); } } catch (Exception e) { e.printStackTrace(); logger.info("",e); } return null; } private JSONObject getRequestInfo(NativeWebRequest webRequest) throws IOException { JSONObject para = new JSONObject(); HttpServletRequest httpServletRequest = webRequest.getNativeRequest(HttpServletRequest.class); String method = httpServletRequest.getMethod(); if (!method.equals("GET") && !method.equals("DELETE")) { if (null != httpServletRequest.getAttribute("para")) { try { para = JSON.parseObject(httpServletRequest.getAttribute("para").toString()); } catch (Exception e) { e.printStackTrace(); logger.info("",e); } } else { StringBuilder buffer = new StringBuilder(); BufferedReader reader = httpServletRequest.getReader(); String line; while ((line = reader.readLine()) != null) { buffer.append(line); } httpServletRequest.setAttribute("para", buffer.toString()); try { para = JSON.parseObject(buffer.toString()); } catch (Exception e) { e.printStackTrace(); logger.info("",e); } } } else { Map@RedisCacheparameterMap = webRequest.getParameterMap(); for (Map.Entry entry : parameterMap.entrySet()) { String key = entry.getKey(); String values = StringUtils.join(entry.getValue()); para.put(key, values); } } return para; } }
接口使用方式如下:
注解聲明,具體的注解處理在上一篇的DAO切面中有寫到。
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface RedisCache { String value() default ""; boolean required() default true; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68466.html
摘要:前言目前系統剛啟動,骨架剛剛搭建完成,在項目中,使用了一些切面,做一些業務無關的處理。在現在的項目里面,分別在,調用,分頁,處理,均使用到了切面。希望本文的閱讀者也不吝將項目中使用的切面分享出來。 前言 目前系統剛啟動,骨架剛剛搭建完成,在項目中,使用了一些切面,做一些業務無關的處理。在本文中,將各個切面例舉出來,用以加深自己對切面的理解。記得在初學切面的時候,一般文章介紹切面的時候,...
摘要:示例代碼如下添加的設置默認的配置對應的是原來的如何使用注解從主庫到備庫的切換 摘要: 本篇文章的場景是做調度中心和監控中心時的需求,后端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢數據時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義注解結合AOP實現直接連接備庫查詢。 一.通過A...
摘要:生產環境服務器環境搭建安裝安裝在系統中通過以下命令輸入查看是否安裝正確,輸出如下創建發布目錄,并給出相應的權限服務器和后臺文件夾上傳前端文件夾改變文件所有權文件的所有權變為加入參數,文件夾以及文件夾里的所有 生產環境服務器環境搭建 安裝jdk 安裝 openjdk-8-jdk 在 ubuntu-16.04 系統中通過以下命令: 1.sudo add-apt-repository pp...
閱讀 2446·2021-10-13 09:40
閱讀 3334·2019-08-30 13:46
閱讀 1120·2019-08-29 14:05
閱讀 2953·2019-08-29 12:48
閱讀 3654·2019-08-26 13:28
閱讀 2142·2019-08-26 11:34
閱讀 2277·2019-08-23 18:11
閱讀 1156·2019-08-23 12:26