content: package com.xxl.job.admin.controller;
  
  import com.xxl.job.admin.controller.annotation.PermissionLimit;
  import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
  import com.xxl.job.core.biz.AdminBiz;
  import com.xxl.job.core.biz.model.HandleCallbackParam;
  import com.xxl.job.core.biz.model.RegistryParam;
  import com.xxl.job.core.biz.model.ReturnT;
  import com.xxl.job.core.util.GsonTool;
  import com.xxl.job.core.util.XxlJobRemotingUtil;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.RequestBody;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.ResponseBody;
  
  import javax.annotation.Resource;
  import javax.servlet.http.HttpServletRequest;
  import java.util.List;
  
  /**
   * Created by xuxueli on 17/5/10.
   */
  @Controller
  @RequestMapping("/api")
  public class JobApiController {
  
  	@Resource
  	private AdminBiz adminBiz;
  
  	/**
  	 * api
  	 * @param uri
  	 * @param data
  	 * @return
  	 */
  	@RequestMapping("/{uri}")
  	@ResponseBody
  	@PermissionLimit(limit = false)
  	public ReturnT<String> api(HttpServletRequest request, @PathVariable("uri") String uri,
  			@RequestBody(required = false) String data) {
  
  		// valid
  		if (!"POST".equalsIgnoreCase(request.getMethod())) {
  			return new ReturnT<String>(ReturnT.FAIL_CODE, "invalid request, HttpMethod not support.");
  		}
  		if (uri == null || uri.trim().length() == 0) {
  			return new ReturnT<String>(ReturnT.FAIL_CODE, "invalid request, uri-mapping empty.");
  		}
  		if (XxlJobAdminConfig.getAdminConfig().getAccessToken() != null
  				&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length() > 0
  				&& !XxlJobAdminConfig.getAdminConfig().getAccessToken()
  						.equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
  			return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");
  		}
  
  		// services mapping
  		if ("callback".equals(uri)) {
  			List<HandleCallbackParam> callbackParamList = GsonTool.fromJson(data, List.class,
  					HandleCallbackParam.class);
  			return adminBiz.callback(callbackParamList);
  		}
  		else if ("registry".equals(uri)) {
  			RegistryParam registryParam = GsonTool.fromJson(data, RegistryParam.class);
  			return adminBiz.registry(registryParam);
  		}
  		else if ("registryRemove".equals(uri)) {
  			RegistryParam registryParam = GsonTool.fromJson(data, RegistryParam.class);
  			return adminBiz.registryRemove(registryParam);
  		}
  		else {
  			return new ReturnT<String>(ReturnT.FAIL_CODE, "invalid request, uri-mapping(" + uri + ") not found.");
  		}
  
  	}
  
  }
  