package com.java110.web.controller; import com.java110.common.constant.CommonConstant; import com.java110.common.factory.ApplicationContextFactory; import com.java110.common.util.Assert; import com.java110.core.base.controller.BaseController; import com.java110.core.context.IPageData; import com.java110.web.smo.impl.LoginServiceSMOImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; /** * 组件调用处理类 */ @RestController public class CallComponentController extends BaseController { private final static Logger logger = LoggerFactory.getLogger(CallComponentController.class); /** * 调用组件方法 * @return */ @RequestMapping(path="/callComponent/{componentCode}/{componentMethod}") public ResponseEntity callComponent( @PathVariable String componentCode, @PathVariable String componentMethod, //@RequestBody String info, HttpServletRequest request){ ResponseEntity responseEntity = null; try{ Assert.hasLength(componentCode,"参数错误,未传入组件编码"); Assert.hasLength(componentMethod,"参数错误,未传入调用组件方法"); Object componentInstance = ApplicationContextFactory.getBean(componentCode); Assert.notNull(componentInstance,"未找到组件对应的处理类,请确认 "+componentCode); Method cMethod = componentInstance.getClass().getDeclaredMethod(componentMethod,IPageData.class); Assert.notNull(cMethod,"未找到组件对应处理类的方法,请确认 "+componentCode+"方法:"+componentMethod); IPageData pd = (IPageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA); logger.debug("组件编码{},组件方法{},pd 为{}",componentCode,componentMethod,pd.toString()); responseEntity = (ResponseEntity)cMethod.invoke(componentInstance,pd); }catch (Exception e){ responseEntity = new ResponseEntity<>("调用组件失败"+e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR); }finally { logger.debug("组件调用返回信息为{}",responseEntity); return responseEntity; } } }