国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

WMS項目中使用到的注解

zorro / 2072人閱讀

摘要:前言和切面一樣,在項目中同樣使用了自定義注解,目前項目中使用的自定義注解主要分為以下一些方面參數解析,緩存方法聲明,導入功能中的聲明。

前言

和切面一樣,在項目中同樣使用了自定義注解,目前項目中使用的自定義注解主要分為以下一些方面: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 parameterMap = webRequest.getParameterMap();
            for (Map.Entry entry : parameterMap.entrySet()) {
                String key = entry.getKey();
                String values = StringUtils.join(entry.getValue());
                para.put(key, values);
            }
        }
        return para;
    }

}
@RedisCache

接口使用方式如下:

注解聲明,具體的注解處理在上一篇的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

相關文章

  • WMS項目使用到的切面

    摘要:前言目前系統剛啟動,骨架剛剛搭建完成,在項目中,使用了一些切面,做一些業務無關的處理。在現在的項目里面,分別在,調用,分頁,處理,均使用到了切面。希望本文的閱讀者也不吝將項目中使用的切面分享出來。 前言 目前系統剛啟動,骨架剛剛搭建完成,在項目中,使用了一些切面,做一些業務無關的處理。在本文中,將各個切面例舉出來,用以加深自己對切面的理解。記得在初學切面的時候,一般文章介紹切面的時候,...

    Tikitoo 評論0 收藏0
  • Spring Boot自定義注解+AOP實現主備庫切換

    摘要:示例代碼如下添加的設置默認的配置對應的是原來的如何使用注解從主庫到備庫的切換 摘要: 本篇文章的場景是做調度中心和監控中心時的需求,后端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢數據時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義注解結合AOP實現直接連接備庫查詢。 一.通過A...

    zhisheng 評論0 收藏0
  • Linux服務器搭建 Java / Postgres / Tomcat / Ngnix 環境 +

    摘要:生產環境服務器環境搭建安裝安裝在系統中通過以下命令輸入查看是否安裝正確,輸出如下創建發布目錄,并給出相應的權限服務器和后臺文件夾上傳前端文件夾改變文件所有權文件的所有權變為加入參數,文件夾以及文件夾里的所有 生產環境服務器環境搭建 安裝jdk 安裝 openjdk-8-jdk 在 ubuntu-16.04 系統中通過以下命令: 1.sudo add-apt-repository pp...

    evin2016 評論0 收藏0

發表評論

0條評論

zorro

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<