Browse Source

接口初次提交

qxp192083 5 years ago
parent
commit
3213539659
24 changed files with 554 additions and 53 deletions
  1. 6 1
      dgtly-api/pom.xml
  2. 2 0
      dgtly-api/src/main/java/com/dgtly/ApiApplication.java
  3. 19 3
      dgtly-api/src/main/java/com/dgtly/api/controller/HellowController.java
  4. 1 1
      dgtly-api/src/main/resources/application.yml
  5. 11 0
      dgtly-apiframework/pom.xml
  6. 1 1
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/ApiFilterConfig.java
  7. 11 1
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/ApiResourcesConfig.java
  8. 3 16
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/SwaggerConfig.java
  9. 22 11
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/exception/ApiGlobalExceptionHandler.java
  10. 0 4
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/exception/LessParamException.java
  11. 83 0
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/interceptor/AuthenticationInterceptor.java
  12. 3 9
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/interceptor/VerifyInterceptor.java
  13. 26 0
      dgtly-apiframework/src/main/java/com/dgtly/apiframework/util/TokenUtil.java
  14. 17 0
      dgtly-common/src/main/java/com/dgtly/common/annotation/ApiPassToken.java
  15. 5 0
      dgtly-common/src/main/java/com/dgtly/common/config/BodyReaderHttpServletRequestWrapper.java
  16. 135 0
      dgtly-common/src/main/java/com/dgtly/common/core/controller/ApiBaseController.java
  17. 0 5
      dgtly-common/src/main/java/com/dgtly/common/core/controller/BaseController.java
  18. 84 0
      dgtly-common/src/main/java/com/dgtly/common/core/domain/ParameterObject.java
  19. 4 1
      dgtly-common/src/main/java/com/dgtly/common/core/domain/ResultType.java
  20. 17 0
      dgtly-common/src/main/java/com/dgtly/common/exception/api/ApiTokenTimeoutException.java
  21. 16 0
      dgtly-common/src/main/java/com/dgtly/common/exception/api/LessParamException.java
  22. 18 0
      dgtly-common/src/main/java/com/dgtly/common/exception/api/NoLoginException.java
  23. 35 0
      dgtly-goods/dgtly-goods-api/src/main/java/com/dgtly/goods/controller/GoodsInfoController.java
  24. 35 0
      dgtly-goods/dgtly-goods-api/src/main/java/com/dgtly/goods/controller/GoodsTypeController.java

+ 6 - 1
dgtly-api/pom.xml

@@ -15,18 +15,23 @@
         前端页面API接口
     </description>
 
-
     <dependencies>
         <dependency>
             <groupId>com.dgtly</groupId>
             <artifactId>dgtly-apiframework</artifactId>
             <version>4.0.0</version>
         </dependency>
+
         <dependency>
             <groupId>com.dgtly</groupId>
             <artifactId>dgtly-system</artifactId>
             <version>4.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>dgtly-goods-api</artifactId>
+            <version>4.0.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
dgtly-api/src/main/java/com/dgtly/ApiApplication.java

@@ -3,8 +3,10 @@ package com.dgtly;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableSwagger2
 public class ApiApplication {
 
     public static void main(String[] args)

+ 19 - 3
dgtly-api/src/main/java/com/dgtly/api/controller/HellowController.java

@@ -1,14 +1,28 @@
 package com.dgtly.api.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.annotation.ApiNoCheckSign;
+import com.dgtly.common.annotation.ApiPassToken;
+import com.dgtly.common.core.controller.ApiBaseController;
 import com.dgtly.common.core.controller.BaseController;
 import com.dgtly.common.core.domain.AjaxResult;
+import com.dgtly.common.core.domain.ParameterObject;
+import com.dgtly.goods.domain.GoodsColor;
+import com.dgtly.system.domain.SysPost;
+import com.dgtly.system.domain.SysUser;
 import com.dgtly.system.service.ISysModelLayoutService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
-public class HellowController extends BaseController {
+@ApiPassToken
+@ApiNoCheckSign
+public class HellowController extends ApiBaseController {
 
 
     @GetMapping("getTest")
@@ -16,10 +30,12 @@ public class HellowController extends BaseController {
         return AjaxResult.success().putKV("param",param);
     }
 
+
     @PostMapping("/post/json")
     public Object j(){
-        String param = getJsonMap().get("param").toString();
-        return AjaxResult.success().putKV("param",param);
+        ParameterObject obj = getParameterObject();obj.checkParameterNotNull("id,aa");
+        SysUser su = obj.parseBean(SysUser.class);
+        return AjaxResult.success();
     }
 
     @PostMapping("/post/form")

+ 1 - 1
dgtly-api/src/main/resources/application.yml

@@ -1,4 +1,4 @@
 spring:
   profiles:
-    active: test
+    active: dev
 #开发环境dev 测试环境test 正式环境prod  启动时可以设置参数Java -jar xxxxxx.jar spring.profiles.actiove=prod

+ 11 - 0
dgtly-apiframework/pom.xml

@@ -77,11 +77,22 @@
             <version>1.5.21</version>
         </dependency>
 
+        <!--jwt-->
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.4.0</version>
+        </dependency>
         <!-- 系统模块-->
         <dependency>
             <groupId>com.dgtly</groupId>
             <artifactId>dgtly-common</artifactId>
         </dependency>
+        <!-- 系统模块-->
+        <dependency>
+            <groupId>com.dgtly</groupId>
+            <artifactId>dgtly-system</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 1 - 1
dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/ApiFilterConfig.java

@@ -30,7 +30,7 @@ public class ApiFilterConfig
     public FilterRegistrationBean registerBodyReaderFilter() {
         FilterRegistrationBean registration = new FilterRegistrationBean();
         registration.setFilter(new BodyReaderFilter());
-        registration.addUrlPatterns("/*");
+        registration.addUrlPatterns("/**");
         registration.setName("bodyReaderFilter");
         registration.setOrder(1);  //值越小,Filter越靠前。
         return registration;

+ 11 - 1
dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/ApiResourcesConfig.java

@@ -1,10 +1,12 @@
 package com.dgtly.apiframework.config;
 
+import com.dgtly.apiframework.interceptor.AuthenticationInterceptor;
 import com.dgtly.apiframework.interceptor.VerifyInterceptor;
 import com.dgtly.common.config.Global;
 import com.dgtly.common.constant.Constants;
 import com.dgtly.apiframework.interceptor.ApiRepeatSubmitInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@@ -22,6 +24,13 @@ public class ApiResourcesConfig implements WebMvcConfigurer
     @Autowired
     private ApiRepeatSubmitInterceptor apiRepeatSubmitInterceptor;
 
+    @Value("${ruoyi.profile}")
+    private String profile;
+    /**
+     * token验证
+     */
+    @Autowired
+    private AuthenticationInterceptor authenticationInterceptor;
     /**
      * 接口校验拦截器
      */
@@ -34,7 +43,7 @@ public class ApiResourcesConfig implements WebMvcConfigurer
     public void addResourceHandlers(ResourceHandlerRegistry registry)
     {
         /** 本地文件上传路径 */
-        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + Global.getProfile() + "/");
+        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + profile + "/");
 
         /** swagger配置 */
         registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
@@ -47,6 +56,7 @@ public class ApiResourcesConfig implements WebMvcConfigurer
     public void addInterceptors(InterceptorRegistry registry)
     {
         registry.addInterceptor(apiRepeatSubmitInterceptor).addPathPatterns("/**");
+        registry.addInterceptor(authenticationInterceptor).addPathPatterns("/**").excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
         registry.addInterceptor(verifyInterceptor).addPathPatterns("/**");
     }
 }

+ 3 - 16
dgtly-apiframework/src/main/java/com/dgtly/apiframework/config/SwaggerConfig.java

@@ -34,16 +34,7 @@ public class SwaggerConfig
     @Bean
     public Docket createRestApi()
     {
-        List<Parameter> parameters = new ArrayList<>();
-        parameters.add(new ParameterBuilder()
-                .name("SwaggerSign")
-                .description("SwaggerSign放行签名")
-                .modelRef(new ModelRef("string"))
-                .parameterType("header")
-                .defaultValue("dgtly-oneportal")
-                .required(true)
-                .build()
-        );
+
 
         return new Docket(DocumentationType.SWAGGER_2)
                 // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
@@ -57,8 +48,6 @@ public class SwaggerConfig
                 // 扫描所有 .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 .build()
-                //添加请求头参数
-                .globalOperationParameters(parameters)
                 ;
     }
 
@@ -70,14 +59,12 @@ public class SwaggerConfig
         // 用ApiInfoBuilder进行定制
         return new ApiInfoBuilder()
                 // 设置标题
-                .title("标题:若依管理系统_接口文档")
+                .title("标题:管理系统_接口文档")
                 // 描述
-                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
+                .description("描述:......")
                 // 作者信息
                 //.contact(new Contact(Global.getName(), null, null))
                 .contact(new Contact("接口文档", null, null))
-                // 版本
-                .version("版本号:" + Global.getVersion())
                 .build();
     }
 }

+ 22 - 11
dgtly-apiframework/src/main/java/com/dgtly/apiframework/exception/ApiGlobalExceptionHandler.java

@@ -2,20 +2,14 @@ package com.dgtly.apiframework.exception;
 
 import com.dgtly.common.core.domain.AjaxResult;
 import com.dgtly.common.core.domain.ResultType;
-import com.dgtly.common.exception.BusinessException;
-import com.dgtly.common.exception.DemoModeException;
-import com.dgtly.common.utils.ServletUtils;
-import com.dgtly.common.utils.security.PermissionUtils;
-import org.apache.shiro.authz.AuthorizationException;
+import com.dgtly.common.exception.api.ApiTokenTimeoutException;
+import com.dgtly.common.exception.api.LessParamException;
+import com.dgtly.common.exception.api.NoLoginException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.validation.BindException;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
 
 /**
  * 全局异常处理器
@@ -38,14 +32,31 @@ public class ApiGlobalExceptionHandler
         return AjaxResult.error("不支持' " + e.getMethod() + "'请求");
     }
     /**
-     * 系统异常
+     * 缺少参数
      */
     @ExceptionHandler(LessParamException.class)
     public AjaxResult handleException(LessParamException e)
     {
         log.error(e.getMessage(), e);
-        return AjaxResult.error(ResultType.LESSPARAM);
+        return AjaxResult.error(ResultType.LESSPARAM.value(),e.getMessage());
+    }
+    /**
+     * 未登录
+     */
+    @ExceptionHandler(NoLoginException.class)
+    public AjaxResult handleException(NoLoginException e)
+    {
+        return AjaxResult.error(ResultType.NOLOGIN);
     }
+    /**
+     * token超时
+     */
+    @ExceptionHandler(ApiTokenTimeoutException.class)
+    public AjaxResult handleException(ApiTokenTimeoutException e)
+    {
+        return AjaxResult.error(ResultType.TOKENTIMEOUT);
+    }
+
 
     /**
      * 拦截未知的运行时异常

+ 0 - 4
dgtly-apiframework/src/main/java/com/dgtly/apiframework/exception/LessParamException.java

@@ -1,4 +0,0 @@
-package com.dgtly.apiframework.exception;
-
-public class LessParamException extends RuntimeException {
-}

+ 83 - 0
dgtly-apiframework/src/main/java/com/dgtly/apiframework/interceptor/AuthenticationInterceptor.java

@@ -0,0 +1,83 @@
+package com.dgtly.apiframework.interceptor;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.dgtly.common.exception.api.ApiTokenTimeoutException;
+import com.dgtly.common.exception.api.NoLoginException;
+import com.dgtly.common.annotation.ApiPassToken;
+import com.dgtly.system.domain.SysUser;
+import com.dgtly.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class AuthenticationInterceptor implements HandlerInterceptor {
+    @Autowired
+    private ISysUserService sysUserService;
+    @Override
+    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
+        String token = httpServletRequest.getHeader("token");// 从 http 请求头中取出 token
+        // 如果不是映射到方法直接通过
+        if(!(object instanceof HandlerMethod)){
+            return true;
+        }
+        HandlerMethod handlerMethod=(HandlerMethod)object;
+        String handlerPackage = handlerMethod.getBeanType().getPackage().getName();
+        String thisPackage = this.getClass().getPackage().getName();
+        String verifPackage =thisPackage.substring(0,thisPackage.indexOf(".",thisPackage.indexOf(".")+1));
+        /*只对代码中的请求进行验证*/
+        if(handlerPackage.indexOf(verifPackage)==-1){
+            return true;
+        }
+
+        ApiPassToken a1=handlerMethod.getBeanType().getAnnotation(ApiPassToken.class);
+        ApiPassToken a2 = handlerMethod.getMethodAnnotation(ApiPassToken.class);
+        //检查是否有passtoken注释,有则跳过认证
+        if (a1!=null||a2!=null) {
+             return true;
+        }
+        //检查有没有需要用户权限的注解
+
+        if (token == null) {
+            throw new NoLoginException();
+        }
+        // 获取 token 中的 user id
+        Long userId;
+        try {
+            userId = Long.parseLong(JWT.decode(token).getAudience().get(0));
+        } catch (JWTDecodeException j) {
+            /*密码错误*/
+            throw new NoLoginException();
+        }
+        SysUser user = sysUserService.selectUserById(userId);
+        if (user == null) {
+            throw new NoLoginException();
+        }
+        // 验证 token
+        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
+        try {
+            jwtVerifier.verify(token);
+        } catch (JWTVerificationException e) {
+            throw new ApiTokenTimeoutException();
+        }
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
+
+    }
+    @Override
+    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
+
+    }
+}

+ 3 - 9
dgtly-apiframework/src/main/java/com/dgtly/apiframework/interceptor/VerifyInterceptor.java

@@ -39,8 +39,7 @@ public class VerifyInterceptor  extends HandlerInterceptorAdapter {
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
     {
         crossDomain(request, response);
-        if (handler instanceof HandlerMethod)
-        {
+        if (handler instanceof HandlerMethod) {
             HandlerMethod h =(HandlerMethod)handler;
             //只对项目中的controller进行拦截 翻过boot的处理方法
             String handlerPackage = h.getBeanType().getPackage().getName();
@@ -54,13 +53,8 @@ public class VerifyInterceptor  extends HandlerInterceptorAdapter {
                  */
                 if(a1==null&&a2==null){
                     if(isDev){
-                        String swaggerSign = request.getHeader("SwaggerSign");
-                        if(swaggerSign!=null&&!swaggerSign.trim().equals("")){
-                            if("dgtly-oneportal".equalsIgnoreCase(swaggerSign)){
-                                logger.info("swagger访问 测试 验签放行");
-                                return true;
-                            }
-                        }
+                        logger.info("开发模式 测试 验签放行");
+                        return true;
                     }
                     /**
                      * 验证是否存在timestamp

+ 26 - 0
dgtly-apiframework/src/main/java/com/dgtly/apiframework/util/TokenUtil.java

@@ -0,0 +1,26 @@
+package com.dgtly.apiframework.util;
+
+import com.auth0.jwt.JWT;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class TokenUtil {
+    public static String getTokenUserId() {
+        String token = getRequest().getHeader("token");// 从 http 请求头中取出 token
+        String userId = JWT.decode(token).getAudience().get(0);
+        return userId;
+    }
+
+    /**
+     * 获取request
+     *
+     * @return
+     */
+    public static HttpServletRequest getRequest() {
+        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
+                .getRequestAttributes();
+        return requestAttributes == null ? null : requestAttributes.getRequest();
+    }
+}

+ 17 - 0
dgtly-common/src/main/java/com/dgtly/common/annotation/ApiPassToken.java

@@ -0,0 +1,17 @@
+package com.dgtly.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/***
+ * 用来跳过验证的 PassToken
+ * @author MRC
+ * @date 201944日 下午7:01:25
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ApiPassToken {
+
+}

+ 5 - 0
dgtly-common/src/main/java/com/dgtly/common/config/BodyReaderHttpServletRequestWrapper.java

@@ -13,11 +13,16 @@ import java.nio.charset.Charset;
  */
 public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
     private final byte[] body;
+    private final String json;
 
     public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) {
         super(request);
         String sessionStream = getBodyString(request);
         body = sessionStream.getBytes(Charset.forName("UTF-8"));
+        json = new String(body);
+    }
+    public String getJson(){
+        return json;
     }
     /**
      * 获取请求Body

+ 135 - 0
dgtly-common/src/main/java/com/dgtly/common/core/controller/ApiBaseController.java

@@ -0,0 +1,135 @@
+package com.dgtly.common.core.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.config.BodyReaderHttpServletRequestWrapper;
+import com.dgtly.common.constant.Constants;
+import com.dgtly.common.core.domain.AjaxResult;
+import com.dgtly.common.core.domain.ParameterObject;
+import com.dgtly.common.core.page.PageDomain;
+import com.dgtly.common.core.page.TableDataInfo;
+import com.dgtly.common.core.page.TableSupport;
+import com.dgtly.common.exception.api.LessParamException;
+import com.dgtly.common.utils.DateUtils;
+import com.dgtly.common.utils.ServletUtils;
+import com.dgtly.common.utils.StringUtils;
+import com.dgtly.common.utils.sql.SqlUtil;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.apache.poi.ss.formula.functions.T;
+import org.apache.poi.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.beans.PropertyEditorSupport;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * API通用数据处理
+ * 
+ * @author ruoyi
+ */
+public class ApiBaseController
+{
+    protected final Logger logger = LoggerFactory.getLogger(ApiBaseController.class);
+
+    /**
+     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+     */
+    @InitBinder
+    public void initBinder(WebDataBinder binder)
+    {
+        // Date 类型转换
+        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
+        {
+            @Override
+            public void setAsText(String text)
+            {
+                setValue(DateUtils.parseDate(text));
+            }
+        });
+    }
+
+    /**
+     * 设置请求分页数据
+     */
+    protected void startPage(ParameterObject obj)
+    {
+        Integer pageNum = null;
+        Integer pageSize =null;
+        String orderBy =null;
+        PageDomain pageDomain = obj.parseBean(PageDomain.class);
+        if(pageDomain!=null){
+            pageNum = pageDomain.getPageNum();
+            pageSize= pageDomain.getPageSize();
+            orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+        }
+        if (!StringUtils.isNotNull(pageNum)) {
+            pageNum = 1;
+         }
+         if(! StringUtils.isNotNull(pageSize))
+        {
+            pageSize = 10;
+
+        }
+
+        PageHelper.startPage(pageNum, pageSize, orderBy);
+
+    }
+
+    /**
+     * 获取request
+     */
+    public HttpServletRequest getRequest()
+    {
+        return ServletUtils.getRequest();
+    }
+
+    /**
+     * 获取response
+     */
+    public HttpServletResponse getResponse()
+    {
+        return ServletUtils.getResponse();
+    }
+
+    /**
+     * 获取session
+     */
+    public HttpSession getSession()
+    {
+        return getRequest().getSession();
+    }
+
+    /**
+     * 响应请求分页数据
+     */
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    protected TableDataInfo getDataTable(List<?> list)
+    {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(0);
+        rspData.setRows(list);
+        rspData.setTotal(new PageInfo(list).getTotal());
+        return rspData;
+    }
+
+
+    /**
+     * 获取请求提交的json参数并封装为JSONObject
+     * @return
+     */
+    public ParameterObject getParameterObject(){
+        return new ParameterObject(getRequest());
+    }
+
+}

+ 0 - 5
dgtly-common/src/main/java/com/dgtly/common/core/controller/BaseController.java

@@ -173,9 +173,4 @@ public class BaseController
         return StringUtils.format("redirect:{}", url);
     }
 
-    public Map<String,Object> getJsonMap(){
-        String data = ((BodyReaderHttpServletRequestWrapper)getRequest()).getBodyString(getRequest());
-        Map<String,Object> map =JSONObject.parseObject(data);
-        return map;
-    }
 }

+ 84 - 0
dgtly-common/src/main/java/com/dgtly/common/core/domain/ParameterObject.java

@@ -0,0 +1,84 @@
+package com.dgtly.common.core.domain;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.config.BodyReaderHttpServletRequestWrapper;
+import com.dgtly.common.exception.api.LessParamException;
+import com.dgtly.common.utils.ServletUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+
+public class ParameterObject {
+
+    private JSONObject jsonObject;
+
+    public ParameterObject(HttpServletRequest request){
+        BodyReaderHttpServletRequestWrapper requestWrapper = new BodyReaderHttpServletRequestWrapper(request);
+        String data = requestWrapper.getJson();
+        if(data!=null&&!data.trim().equals("")){
+            jsonObject =  JSONObject.parseObject(data);
+        }
+    }
+
+    public <T> T parseBean(Class<T> clazz){
+        if(jsonObject!=null){
+            return JSON.parseObject(jsonObject.toJSONString(), clazz);
+        }else{
+            return null;
+        }
+    }
+
+    public JSONObject getJSONObject(String key){
+        if(jsonObject!=null){
+            return jsonObject.getJSONObject(key);
+        }else{
+            return null;
+        }
+    }
+    public JSONObject getJSONObject(){
+        if(jsonObject!=null){
+            return jsonObject;
+        }else{
+            return null;
+        }
+    }
+
+    public String getString(String key){
+        if(jsonObject!=null){
+            return jsonObject.getString(key);
+        }else{
+            return null;
+        }
+    }
+
+    public Long getLong(String key){
+        if(jsonObject!=null){
+            return jsonObject.getLong(key);
+        }else{
+            return null;
+        }
+    }
+
+    public Object getObject(String key){
+        if(jsonObject!=null){
+            return jsonObject.get(key);
+        }else{
+            return null;
+        }
+    }
+
+    public void checkParameterNotNull(String fieldNames){
+        if(jsonObject!=null){
+            String[] fieldList = fieldNames.split(",");
+            List<String> list = Arrays.asList(fieldList);
+            for(String field:list){
+                if(!jsonObject.containsKey(field)){
+                    throw new LessParamException("缺少字段:"+field);
+                }
+            }
+        }
+    }
+
+}

+ 4 - 1
dgtly-common/src/main/java/com/dgtly/common/core/domain/ResultType.java

@@ -21,7 +21,10 @@ public enum ResultType {
     ,SIGNERROR(504,"验签错误")
     /** 暂不支持此种请求方式 */
     ,FORBIDMETHOD(505,"暂不支持此种请求方式")
-    /** 缺少参数 */
+    /** 缺少token */
+    ,NOLOGIN(506,"未登录")
+    /** 缺少token */
+    ,TOKENTIMEOUT(507,"token超时")
     ;
 
 

+ 17 - 0
dgtly-common/src/main/java/com/dgtly/common/exception/api/ApiTokenTimeoutException.java

@@ -0,0 +1,17 @@
+package com.dgtly.common.exception.api;
+
+import com.dgtly.common.exception.base.BaseException;
+
+public class ApiTokenTimeoutException extends BaseException {
+    private static final long serialVersionUID = 1L;
+
+    public ApiTokenTimeoutException()
+    {
+        super("token超时!");
+    }
+    public ApiTokenTimeoutException(String msg)
+    {
+        super(msg);
+    }
+
+}

+ 16 - 0
dgtly-common/src/main/java/com/dgtly/common/exception/api/LessParamException.java

@@ -0,0 +1,16 @@
+package com.dgtly.common.exception.api;
+
+import com.dgtly.common.exception.base.BaseException;
+
+public class LessParamException extends BaseException {
+    private static final long serialVersionUID = 1L;
+
+    public LessParamException()
+    {
+        super("缺少参数");
+    }
+    public LessParamException(String msg)
+    {
+        super(msg);
+    }
+}

+ 18 - 0
dgtly-common/src/main/java/com/dgtly/common/exception/api/NoLoginException.java

@@ -0,0 +1,18 @@
+package com.dgtly.common.exception.api;
+
+
+import com.dgtly.common.exception.base.BaseException;
+
+public class NoLoginException extends BaseException {
+    private static final long serialVersionUID = 1L;
+
+    public NoLoginException()
+    {
+        super("未登录");
+    }
+    public NoLoginException(String msg)
+    {
+        super(msg);
+    }
+
+}

+ 35 - 0
dgtly-goods/dgtly-goods-api/src/main/java/com/dgtly/goods/controller/GoodsInfoController.java

@@ -0,0 +1,35 @@
+package com.dgtly.goods.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dgtly.common.annotation.ApiNoCheckSign;
+import com.dgtly.common.annotation.ApiPassToken;
+import com.dgtly.common.core.controller.ApiBaseController;
+import com.dgtly.common.core.domain.AjaxResult;
+import com.dgtly.common.core.domain.ParameterObject;
+import com.dgtly.goods.domain.GoodsInfo;
+import com.dgtly.goods.service.IGoodsInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/goods/info")
+@ApiPassToken/* 不用验证token  方法上可用*/
+//@ApiNoCheckSign/* 不用验证 签名 方法上可用*/
+public class GoodsInfoController extends ApiBaseController {
+
+    @Autowired
+    private IGoodsInfoService goodsInfoService;
+
+    @PostMapping("/page")
+    public Object getPasgeList(){
+        ParameterObject obj =  getParameterObject();
+        GoodsInfo gi = obj.parseBean(GoodsInfo.class);
+        startPage(obj);/*向分页传递 分页参数*/
+        List<GoodsInfo> goodsInfos =  goodsInfoService.selectGoodsInfoList(gi);
+        return AjaxResult.success(getDataTable(goodsInfos));
+    }
+}

+ 35 - 0
dgtly-goods/dgtly-goods-api/src/main/java/com/dgtly/goods/controller/GoodsTypeController.java

@@ -0,0 +1,35 @@
+package com.dgtly.goods.controller;
+
+import com.dgtly.common.annotation.ApiNoCheckSign;
+import com.dgtly.common.annotation.ApiPassToken;
+import com.dgtly.common.core.controller.ApiBaseController;
+import com.dgtly.common.core.domain.AjaxResult;
+import com.dgtly.common.core.domain.ParameterObject;
+import com.dgtly.common.core.domain.Ztree;
+import com.dgtly.goods.domain.GoodsType;
+import com.dgtly.goods.service.IGoodsTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/goods/type")
+@ApiPassToken/* 不用验证token  方法上可用*/
+@ApiNoCheckSign/* 不用验证 签名 方法上可用*/
+public class GoodsTypeController extends ApiBaseController {
+
+    @Autowired
+    private IGoodsTypeService goodsTypeService;
+
+    @PostMapping("/treeData")
+    public Object getTreeData(){
+        ParameterObject obj =  getParameterObject();
+        //obj.checkParameterNotNull("name,id,type");/*检测参数中是否包含所需参数,如若缺少直接会返回缺少参数返回值*/
+        List<Ztree> list=  goodsTypeService.selectGoodsTypeTree(null);
+        return AjaxResult.success().putKV("tree",list);
+
+    }
+}