使用Spring自定义注解生产Http接口描述信息(2)

/** 
 * <p>类描述: 生成接口描述信息并放入Application中 </p>
 * <p>创建人:王成委  </p>
 * <p>创建时间:2015年1月19日 下午4:42:24  </p>
 * <p>版权说明: © 2015 Tiamaes </p>
 * @see com.tiamaes.gjds.app.annotation.AppInterface
 */

public class InterfaceAnnotationConfigProcesser implements ApplicationContextAware,InitializingBean{

private Log logger = LogFactory.getLog(getClass());
 
 private Map<String,List<RequestMethodMapping>> mappers =
   new HashMap<String,List<RequestMethodMapping>>();
 
 private WebApplicationContext applicationContext;
 
 /**
  * <p>方法描述:加载带有{@link com.tiamaes.gjds.app.annotation.AppInterface}注解的接口</p>
  * <p>首先需要获取所有接口,然后过滤方法中带有@AppInterface</p>
  * <p>创建人: 王成委  </p>
  * <p>创建时间: 2015年1月10日 上午10:50:06 </p>
  */
 public void loadHandlerMapping(){
  this.logger.info("初始化配置");
  Map<String, HandlerMapping> handlers = BeanFactoryUtils.beansOfTypeIncludingAncestors(
    applicationContext, HandlerMapping.class, true, false);
 
  for(Entry<String, HandlerMapping> entry : handlers.entrySet()){
   HandlerMapping mapping = entry.getValue();
   if(mapping instanceof RequestMappingHandlerMapping){
    RequestMappingHandlerMapping requestHandler = (RequestMappingHandlerMapping)mapping;
    Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestHandler.getHandlerMethods();
    for(Entry<RequestMappingInfo, HandlerMethod> handlerMethod : handlerMethods.entrySet()){
     AppInterface annotation = handlerMethod.getValue().getMethodAnnotation(AppInterface.class);
     if(annotation== null)continue;
     PatternsRequestCondition patternsCondition = handlerMethod.getKey().getPatternsCondition();
     String requestUrl = SetUtils.first(patternsCondition.getPatterns());
     this.register(requestUrl, annotation,handlerMethod.getValue().getBeanType());
    }
   }
  }
 }
 
 /**
  * <p>方法描述:注册方法</p>
  * <p>创建人: 王成委  </p>
  * <p>创建时间: 2015年1月10日 上午10:50:06 </p>
  * @param requestUrl
  * @param annotation
  * @param beanType
  */
 private void register(String requestUrl, AppInterface annotation,
   Class<?> beanType) {
  String group = annotation.group();
  List<RequestMethodMapping> groupMappers = this.mappers.get(group);
  if(groupMappers == null)groupMappers = new ArrayList<RequestMethodMapping>();
  RequestMethodMapping mapper = new RequestMethodMapping();
  mapper.setGroup(group);
  mapper.setController(beanType.getName());
  mapper.setOrder(annotation.order());
  mapper.setName(annotation.value());
  mapper.setUrl(requestUrl);
  mapper.setParams(this.toParameters(annotation.params()));
  groupMappers.add(mapper);
  this.mappers.put(group, groupMappers);
 }
 
 /**
  * <p>方法描述:读取参数</p>
  * <p>创建人: 王成委  </p>
  * <p>创建时间: 2015年1月10日 上午10:50:06 </p>
  * @param params
  * @return
  */
 private List<RequestMethodParameter> toParameters(InterfaceParam[] params){
  List<RequestMethodParameter> parameters = new ArrayList<RequestMethodParameter>();
 
  for(InterfaceParam param : params){
   RequestMethodParameter bean = new RequestMethodParameter();
   bean.setName(param.name());
   bean.setDesc(param.desc());
   if(StringUtils.startsWithIgnoreCase(param.testValue(), "#")){
    String var = param.testValue();
    String value = getByVariable(var.substring(var.indexOf("#")+1));
    bean.setTestValue(value);
   }else{
    bean.setTestValue(param.testValue());
   }
   parameters.add(bean);
  }
  return parameters;
 }
 
 /**
  * <p>方法描述:获取变量的值</p>
  * <p>创建人: 王成委  </p>
  * <p>创建时间: 2015年1月10日 上午10:50:06 </p>
  * @param var
  * @return
  */
 private String getByVariable(String var){
  Variable variable = Variable.valueOf(var);
  return variable.getValue();
 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d8ac33faa3122ffd2e849287f710fc93.html