java自定义注解实现对象到xml配置的转换
来源:互联网 发布:linux改变用户所属组 编辑:程序博客网 时间:2024/05/21 18:51
前后端交互经常会涉及到接口的提供问题,后端提供的接口经常要反馈给前端,在工作中发现给前端提供接口的时候,需要按照一定格式写成xml(或者json文本)导入系统给前端人员使用,但是那么多接口一个个写成xml很烦,然后自己试着引入自定义注解,来将接口生成为xml文件。
自定义注解
- 用于进行接口和参数的注释
注解代码
Information.java
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface Information { public String description() default "";}
自定义接口转换类
- 将类转化为xml格式文件导出,主要针对springMVC那一套接口
工具类代码
ApiUtils.java
import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.lang.annotation.Annotation;import java.lang.reflect.Method;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class ApiUtils { public static <T> void transFromClass(Class<T> classtype) { Document document = DocumentHelper.createDocument(); //添加节点信息 Element rootElement = document.addElement("roots"); rootElement.setText("这些接口的类名为:"+classtype.getName()); RequestMapping classRequestMappingAnnotation = classtype.getAnnotation(RequestMapping.class); String rootString = classRequestMappingAnnotation.value()[0]; //获取该类的所有接口 Method[] methods = classtype.getDeclaredMethods(); //声明注解集合 Annotation[] annotations; // 遍历所有的方法得到各方法上面的注解信息 for (Method method : methods) { Element apiElement = rootElement.addElement("api"); //获取方法上的RequestMapping注解信息 RequestMapping requestMapping = method.getAnnotation(RequestMapping.class); //将接口设为<api></api>标签的value属性 apiElement.addAttribute("value", rootString+requestMapping.value()[0]); //获取方法上的Information注解的注释信息构成<description></description> Information apiInformation = method.getAnnotation(Information.class); Element descriptionElement = apiElement.addElement("description"); descriptionElement.setText(apiInformation.description()); //获取方法上的参数信息构成<params></params>标签,里面包含多个<param></param>标签 Element paramsElement = apiElement.addElement("params"); Class<?>[] paramTypes = method.getParameterTypes(); Annotation[][] paramAnnotations = method.getParameterAnnotations(); for (int i = 0; i < paramTypes.length; i++) { Element paramElement = paramsElement.addElement("param"); Element paramType = paramElement.addElement("type"); paramType.setText(paramTypes[i].getName()); Element paramDescription = paramElement.addElement("description"); //将参数上的参数注释输出到<description></description>标签 for (Annotation annotation : paramAnnotations[i]) { if (annotation instanceof Information) { paramDescription.setText(((Information) annotation).description()); } } } } try { OutputFormat format = new OutputFormat(" ", true); Writer fileWriter = new FileWriter("d:\\module.xml"); XMLWriter xmlWriter = new XMLWriter(fileWriter, format); xmlWriter.write(document); xmlWriter.flush(); xmlWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(document.asXML()); } public static void main(String[] args) { transFromClass(TestController.class); }}
测试类(要转换的接口)
TestController.java
@RequestMapping(value = "/report/*")public class TestController { @RequestMapping(value = "/index.action") @Information(description="这个接口用于XXXXX") public String test1(@Information(description="姓名")String name, @Information(description="性别")String sex){ return name; } @RequestMapping(value = "/set.action") @Information(description="这个接口用于OOOOO") public String test2(@Information(description="姓名")String name, int age){ return name; }}
转换结果,生成文件
module.xml
<?xml version="1.0" encoding="UTF-8"?><roots>这些接口的类名为:TestController <api value="/report/*/index.action"> <description>这个接口用于XXXXX</description> <params> <param> <type>java.lang.String</type> <description>姓名</description> </param> <param> <type>java.lang.String</type> <description>性别</description> </param> </params> </api> <api value="/report/*/set.action"> <description>这个接口用于OOOOO</description> <params> <param> <type>java.lang.String</type> <description>姓名</description> </param> <param> <type>int</type> <description/> </param> </params> </api></roots>
自定义注解
-关于自定义注解这一块,推荐一篇不错博客
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
博主总结的比较细,知识导图也很清晰
问题:没有对接口返回值进行配置,等有时间了想想比较好的办法……
0 0
- java自定义注解实现对象到xml配置的转换
- 使用XStream注解实现Java对象与XML互相转换的代码示例
- 使用XStream注解实现Java对象与XML互相转换的代码示例
- Spring MVC中利用注解实现XML和Java对象之间的转换
- java 中jaxb实现对象到xml互相转换
- 使用XStream注解实现Java对象与XML互相转换的代码示例---转自:http://www.blogjava.net/bolo
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)
- Java自定义注解的实现
- JAVA-实现POJO 到XML的相互转换
- Jaxb实现Java对象与XML之间的转换
- 利用JAXB实现java对象和xml的相互转换
- 使用 XStream 实现 Java 对象与 XML 的相互转换
- xstream实现java对象和XML的互相转换
- JAXB实现JAVA对象和XML字符串的互相转换
- JAXB 可以实现Java对象与XML的相互转换
- java通过注解将对象转换为xml
- 利用Java反射实现普通对象到JSONObject的转换
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- MyBatis和IBatis的区别
- 关联字段字符集相同,但是校验规则不一样,导致表关联时做隐式转换,无法用到关联字段上的索引
- JavaScript中String(a)和new String(a)两种生成字符串的方法的使用区别
- CFgym:Ex Machina(交互 & 线段树区间最值)
- Hive 使用RegexSerDe来处理标准格式Apache Web日志
- java自定义注解实现对象到xml配置的转换
- 相机的功能丰富,加入前后摄像头的翻转,闪光灯,对焦功能。
- 最小生成树
- Java8新特性浅析
- Alsa框架录音程序
- 嵌入式工程师入门的那些
- HihoCoder
- TCP三次握手与四次挥手
- struts2初步使用及详解