如何利用反射获得注解的名称和内部的值
2013-12-06 17:49
489 查看
使用httpclient向后端API POST数据的时候, 需要构建POST的param, 如果使用代码写的话太不优雅了, 所以考虑一种比较通用的方式实现, 详见代码, 我们使用的注解是 fastjson的, 大家可以使用其他的替换, 意思都是相通的
package zhwb.service.util; import com.alibaba.fastjson.annotation.JSONField; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Date: 13-12-6 * Time: 上午11:57 * * @author jack.zhang */ public abstract class HttpFastJsonUtils { private static final Logger LOG = LoggerFactory.getLogger(HttpFastJsonUtils.class); public static final List<BasicNameValuePair> convertBeanToBasicParam(Object jsonAnnotationBean) { if (jsonAnnotationBean == null) { throw new IllegalArgumentException("bean can not be null"); } List<BasicNameValuePair> result = new ArrayList<BasicNameValuePair>(); Field[] fields = jsonAnnotationBean.getClass().getDeclaredFields(); for (Field field : fields) { if (!field.isAnnotationPresent(JSONField.class)) { //field上是否有JsonField注解 throw new IllegalArgumentException("annotation can only be JSONFiled type"); } JSONField jsonField = field.getAnnotation(JSONField.class); //拿到field上的JsonField注解对象 field.setAccessible(true); String fieldString; Object fieldValue = null; try { fieldValue = field.get(jsonAnnotationBean); //反射得到field的值, 注意private需要setAccessible } catch (IllegalAccessException e) { LOG.error("IllegalAccessException occur {}", e.getMessage()); } if (fieldValue != null) { if (field.getType().equals(Date.class)) { //对一些特殊类型做处理 fieldString = DateUtil.formatDateToString((Date) fieldValue, "yyyy-MM-dd"); } else { fieldString = String.valueOf(fieldValue); } BasicNameValuePair basicNameValuePair = new BasicNameValuePair(jsonField.name(), fieldString);//构建httpclient需要的list result.add(basicNameValuePair); } } return result; } }
相关文章推荐
- asp.net中如何利用反射获取动态变量名称
- Java利用反射如何查找使用指定注解的类详解
- 安卓如何利用资源名称获得资源Id
- 如何自定义注解Annotation,并利用反射进行解析
- 高版本Android如何利用反射调用系统隐藏的远程服务拦截来电
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- (转)如何获得跟踪文件名称
- 如何利用反射实现EL表达式
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 利用反射获取类或者方法或者字段上的注解的值
- 利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 如何获得当前所在的DLL模块名称
- 利用反射技术动态执行方法时如何取引用类参数的值
- 利用反射机制动态获取对象属性名称及数据类型
- 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
- 15 如何从枚举中获得枚举项名称值
- Yii 中如何获取当前controller名称和controller内部action方法Id
- Java中利用反射查找使用指定注解的类---找到指定包下的指定注解类
- 如何利用反射遍历某个页面下所有的控件的值!??