RestFrontApi.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package com.java110.front.rest;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.java110.front.smo.api.IApiSMO;
  4. import com.java110.core.base.controller.BaseController;
  5. import com.java110.utils.constant.CommonConstant;
  6. import com.java110.vo.ResultVo;
  7. import io.swagger.annotations.ApiImplicitParam;
  8. import io.swagger.annotations.ApiOperation;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.http.HttpStatus;
  13. import org.springframework.http.ResponseEntity;
  14. import org.springframework.web.bind.annotation.*;
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. /**
  19. * 微信小程序api处理类
  20. * <p>
  21. * 主要用于透传api 直接提供出来的接口
  22. * <p>
  23. * 方便快速开发
  24. * <p>
  25. * add by wuxw 2019-11-19
  26. */
  27. @RestController
  28. @RequestMapping(path = "/app")
  29. public class RestFrontApi extends BaseController {
  30. private final static Logger logger = LoggerFactory.getLogger(RestFrontApi.class);
  31. @Autowired
  32. private IApiSMO apiSMOImpl;
  33. /**
  34. * 资源请求 post方式
  35. *
  36. * /app/user.listUser
  37. *
  38. * /api/user.listUser
  39. *
  40. * @param service 请求接口方式
  41. * @param postInfo post内容
  42. * @param request 请求对象 查询头信息 url等信息
  43. * @return http status 200 成功 其他失败
  44. */
  45. @RequestMapping(path = "/{service:.+}", method = RequestMethod.POST)
  46. @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
  47. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  48. public ResponseEntity<String> servicePost(@PathVariable String service,
  49. @RequestBody String postInfo,
  50. HttpServletRequest request) {
  51. ResponseEntity<String> responseEntity = null;
  52. try {
  53. Map<String, String> headers = new HashMap<String, String>();
  54. this.getRequestInfo(request, headers);
  55. headers.put(CommonConstant.HTTP_SERVICE, service);
  56. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
  57. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
  58. responseEntity = apiSMOImpl.doApi(postInfo, headers);
  59. } catch (Throwable e) {
  60. logger.error("请求post 方法[" + service + "]失败:" + postInfo, e);
  61. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  62. }
  63. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  64. return responseEntity;
  65. }
  66. /**
  67. * 资源请求 get方式
  68. *
  69. * @param service 请求接口方式
  70. * @param request 请求对象 查询头信息 url等信息
  71. * @return http status 200 成功 其他失败
  72. */
  73. @RequestMapping(path = "/{service:.+}", method = RequestMethod.GET)
  74. @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
  75. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  76. public ResponseEntity<String> serviceGet(@PathVariable String service,
  77. HttpServletRequest request) {
  78. ResponseEntity<String> responseEntity = null;
  79. try {
  80. Map<String, String> headers = new HashMap<String, String>();
  81. this.getRequestInfo(request, headers);
  82. headers.put(CommonConstant.HTTP_SERVICE, service);
  83. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
  84. logger.debug("api:{} 请求报文为:{},header信息为:{}", "", headers);
  85. responseEntity = apiSMOImpl.doApi(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  86. } catch (Throwable e) {
  87. logger.error("请求get 方法[" + service + "]失败:", e);
  88. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  89. }
  90. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  91. return responseEntity;
  92. }
  93. /**
  94. * 资源请求 get方式
  95. *
  96. * @param request 请求对象 查询头信息 url等信息
  97. * @return http status 200 成功 其他失败
  98. */
  99. @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.GET)
  100. @ApiOperation(value = "资源get请求", notes = "test: 返回 2XX 表示服务正常")
  101. @ApiImplicitParam(paramType = "query", name = "subServiceGet", value = "用户编号", required = true, dataType = "String")
  102. public ResponseEntity<String> subServiceGet(
  103. @PathVariable String resource,
  104. @PathVariable String action,
  105. HttpServletRequest request) {
  106. ResponseEntity<String> responseEntity = null;
  107. Map<String, String> headers = new HashMap<String, String>();
  108. try {
  109. this.getRequestInfo(request, headers);
  110. headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
  111. headers.put(CommonConstant.HTTP_RESOURCE, resource);
  112. headers.put(CommonConstant.HTTP_ACTION, action);
  113. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_GET);
  114. logger.debug("api:{} 请求报文为:{},header信息为:{}", "", headers);
  115. responseEntity = apiSMOImpl.doApi(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  116. } catch (Throwable e) {
  117. logger.error("请求get 方法[" + action + "]失败:", e);
  118. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  119. }
  120. logger.debug("api:{} 返回信息为:{}", action, responseEntity);
  121. return responseEntity;
  122. }
  123. /**
  124. * 资源请求 post方式
  125. *
  126. * @param resource 请求接口方式
  127. * @param postInfo post内容
  128. * @param request 请求对象 查询头信息 url等信息
  129. * @return http status 200 成功 其他失败
  130. */
  131. @RequestMapping(path = "/{resource}/{action}", method = RequestMethod.POST)
  132. @ApiOperation(value = "资源post请求", notes = "test: 返回 2XX 表示服务正常")
  133. @ApiImplicitParam(paramType = "query", name = "subServicePost", value = "用户编号", required = true, dataType = "String")
  134. public ResponseEntity<String> subServicePost(
  135. @PathVariable String resource,
  136. @PathVariable String action,
  137. @RequestBody String postInfo,
  138. HttpServletRequest request) {
  139. ResponseEntity<String> responseEntity = null;
  140. Map<String, String> headers = new HashMap<String, String>();
  141. try {
  142. this.getRequestInfo(request, headers);
  143. headers.put(CommonConstant.HTTP_SERVICE, "/" + resource + "/" + action);
  144. headers.put(CommonConstant.HTTP_RESOURCE, resource);
  145. headers.put(CommonConstant.HTTP_ACTION, action);
  146. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST);
  147. logger.debug("api:{} 请求报文为:{},header信息为:{}", action, postInfo, headers);
  148. responseEntity = apiSMOImpl.doApi(postInfo, headers);
  149. } catch (Throwable e) {
  150. logger.error("请求post 方法[" + action + "]失败:" + postInfo, e);
  151. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  152. }
  153. logger.debug("api:{} 返回信息为:{}", action, responseEntity);
  154. return responseEntity;
  155. }
  156. /**
  157. * 资源请求 put方式
  158. *
  159. * @param service 请求接口方式
  160. * @param postInfo 修改内容
  161. * @param request 请求对象 查询头信息 url等信息
  162. * @return http status 200 成功 其他失败
  163. */
  164. @RequestMapping(path = "/{service:.+}", method = RequestMethod.PUT)
  165. @ApiOperation(value = "资源put请求", notes = "test: 返回 2XX 表示服务正常")
  166. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  167. public ResponseEntity<String> servicePut(@PathVariable String service,
  168. @RequestBody String postInfo,
  169. HttpServletRequest request) {
  170. ResponseEntity<String> responseEntity = null;
  171. try {
  172. Map<String, String> headers = new HashMap<String, String>();
  173. this.getRequestInfo(request, headers);
  174. headers.put(CommonConstant.HTTP_SERVICE, service);
  175. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_PUT);
  176. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, postInfo, headers);
  177. responseEntity = apiSMOImpl.doApi(postInfo, headers);
  178. } catch (Throwable e) {
  179. logger.error("请求put 方法[" + service + "]失败:", e);
  180. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  181. }
  182. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  183. return responseEntity;
  184. }
  185. /**
  186. * 资源请求 delete方式
  187. *
  188. * @param service 请求接口方式
  189. * @param request 请求对象 查询头信息 url等信息
  190. * @return http status 200 成功 其他失败
  191. */
  192. @RequestMapping(path = "/{service:.+}", method = RequestMethod.DELETE)
  193. @ApiOperation(value = "资源delete请求", notes = "test: 返回 2XX 表示服务正常")
  194. @ApiImplicitParam(paramType = "query", name = "service", value = "用户编号", required = true, dataType = "String")
  195. public ResponseEntity<String> serviceDelete(@PathVariable String service,
  196. HttpServletRequest request) {
  197. ResponseEntity<String> responseEntity = null;
  198. try {
  199. Map<String, String> headers = new HashMap<String, String>();
  200. this.getRequestInfo(request, headers);
  201. headers.put(CommonConstant.HTTP_SERVICE, service);
  202. headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_DELETE);
  203. logger.debug("api:{} 请求报文为:{},header信息为:{}", service, "", headers);
  204. responseEntity = apiSMOImpl.doApi(JSONObject.toJSONString(getParameterStringMap(request)), headers);
  205. } catch (Throwable e) {
  206. logger.error("请求delete 方法[" + service + "]失败:", e);
  207. responseEntity = new ResponseEntity<String>("请求发生异常," + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
  208. }
  209. logger.debug("api:{} 返回信息为:{}", service, responseEntity);
  210. return responseEntity;
  211. }
  212. /**
  213. * 获取请求信息
  214. *
  215. * @param request
  216. * @param headers
  217. * @throws RuntimeException
  218. */
  219. private void getRequestInfo(HttpServletRequest request, Map headers) throws Exception {
  220. try {
  221. super.initHeadParam(request, headers);
  222. super.initUrlParam(request, headers);
  223. this.getUserInfo(request, headers);
  224. } catch (Exception e) {
  225. logger.error("加载头信息失败", e);
  226. throw e;
  227. }
  228. }
  229. private void getUserInfo(HttpServletRequest request, Map headers) throws Exception {
  230. Object claimsObj = request.getAttribute("claims");
  231. if (claimsObj == null) {
  232. return;
  233. }
  234. Map<String, String> claims = (Map<String, String>) claimsObj;
  235. for (String key : claims.keySet()) {
  236. if("userId".equals(key)){
  237. headers.put("user_id", claims.get(key));
  238. }
  239. headers.put(key, claims.get(key));
  240. }
  241. }
  242. public IApiSMO getApiSMOImpl() {
  243. return apiSMOImpl;
  244. }
  245. public void setApiSMOImpl(IApiSMO apiSMOImpl) {
  246. this.apiSMOImpl = apiSMOImpl;
  247. }
  248. }