博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WMS项目中使用到的注解
阅读量:6861 次
发布时间:2019-06-26

本文共 4359 字,大约阅读时间需要 14 分钟。

前言

和切面一样,在项目中同样使用了自定义注解,目前项目中使用的自定义注解主要分为以下一些方面: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)@Documentedpublic @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

接口使用方式如下:clipboard.png

注解声明,具体的注解处理在上一篇的DAO切面中有写到。

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface RedisCache {    String value() default "";    boolean required() default true;}

转载地址:http://qnhyl.baihongyu.com/

你可能感兴趣的文章
linux 安装 node
查看>>
“不劳而获”的数字货币真的存在么?
查看>>
k8s拾遗 - Secret
查看>>
Android SparseArray 原理解析
查看>>
PHP类的定义
查看>>
Composer 中国镜像地址配置
查看>>
近一个月的面试总结
查看>>
eclipse安装插件
查看>>
perl 非贪婪正则匹配 mysql 导出指定字段
查看>>
Android状态栏黑色字体
查看>>
MySQL主从复制之主库宕机处理
查看>>
Spring Cloud Eureka 源码分析(二) 客户端启动过程
查看>>
交换器限制局域网速度方法:qos限制局域网网速
查看>>
rip等价负载均衡
查看>>
10.23cron10.24chkconfig工具10.25systemd管理服务10.26unit
查看>>
centosFailure:repodata/repomd.xml [Err14] yum inst
查看>>
linux下top命令详解
查看>>
我的友情链接
查看>>
hadoop Unable to load native-hadoop library for your platform
查看>>
MySQL优化讲解
查看>>