From 0386a736e426bbe1604b393d23189a71b2be2b60 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Thu, 28 Feb 2019 19:28:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=80=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E6=89=93=E5=8C=85=E8=84=9A=E6=9C=AC=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20Dubbo=20=E5=8F=82=E6=95=B0=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server.md | 18 ++++ admin/admin-application/pom.xml | 10 ++ .../admin/application/AdminApplication.java | 4 +- .../application/config/MVCConfiguration.java | 14 ++- .../config/SwaggerConfiguration.java | 4 +- .../controller/ResourceController.java | 47 ++++++++-- .../application/vo/AdminMenuTreeNodeVO.java | 24 ++--- .../src/main/resources/application.yaml | 2 +- admin/admin-sdk/pom.xml | 1 + admin/admin-service-api/pom.xml | 6 +- .../mall/admin/api/ResourceService.java | 4 + .../mall/admin/api/dto/ResourceAddDTO.java | 94 +++++++++++++++++++ .../admin/service/ResourceServiceImpl.java | 9 +- .../main/resources/config/application.yaml | 13 +-- build_admin.sh | 1 + common/common-framework/pom.xml | 5 + .../config/GlobalExceptionHandler.java | 31 ++++-- .../framework/constant/SysErrorCodeEnum.java | 1 + .../common/framework/util/ExceptionUtil.java | 13 +++ publish_admin.sh | 3 + 20 files changed, 251 insertions(+), 53 deletions(-) create mode 100644 Server.md create mode 100644 admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/ResourceAddDTO.java create mode 100644 build_admin.sh create mode 100644 publish_admin.sh diff --git a/Server.md b/Server.md new file mode 100644 index 000000000..d29f3b0fb --- /dev/null +++ b/Server.md @@ -0,0 +1,18 @@ +# 前端 Server + +* admin 18083 +* + +# 后端 Server + +# 基础服务 + +## MySQL + +## Zookeeper + +# 运维 + +* ssh 端口 +* 工作目录 /work2/ + diff --git a/admin/admin-application/pom.xml b/admin/admin-application/pom.xml index 7b94a59c4..10b1a2f9e 100644 --- a/admin/admin-application/pom.xml +++ b/admin/admin-application/pom.xml @@ -113,6 +113,16 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + diff --git a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/AdminApplication.java b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/AdminApplication.java index 5513088f7..5aeb5de0f 100644 --- a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/AdminApplication.java +++ b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/AdminApplication.java @@ -2,12 +2,14 @@ package cn.iocoder.mall.admin.application; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication(scanBasePackages = {"cn.iocoder.mall.admin"}) public class AdminApplication { public static void main(String[] args) { - SpringApplication.run(AdminApplication.class, args); + ConfigurableApplicationContext ctx = SpringApplication.run(AdminApplication.class, args); + System.out.println(); // TODO 后面去掉,这里是临时的 } } \ No newline at end of file diff --git a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/MVCConfiguration.java b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/MVCConfiguration.java index f052bb8a6..8cfdabb64 100644 --- a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/MVCConfiguration.java +++ b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/MVCConfiguration.java @@ -5,10 +5,7 @@ import cn.iocoder.mall.admin.sdk.interceptor.AdminSecurityInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.*; @EnableWebMvc @Configuration @@ -36,4 +33,13 @@ public class MVCConfiguration implements WebMvcConfigurer { registry.addResourceHandler("webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } + // TODO 芋艿,允许跨域 + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedHeaders("*") + .allowedMethods("*") + .allowedOrigins("*"); + } + } \ No newline at end of file diff --git a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/SwaggerConfiguration.java b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/SwaggerConfiguration.java index eae66c317..adee77e1c 100644 --- a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/SwaggerConfiguration.java +++ b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/config/SwaggerConfiguration.java @@ -11,7 +11,7 @@ import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration -@EnableSwagger2 +@EnableSwagger2 // TODO 生产环境时,禁用掉。 public class SwaggerConfiguration { @Bean @@ -19,7 +19,7 @@ public class SwaggerConfiguration { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() - .apis(RequestHandlerSelectors.basePackage("cn.iocoder.mall.admin.controller")) + .apis(RequestHandlerSelectors.basePackage("cn.iocoder.mall.admin.application.controller")) .paths(PathSelectors.any()) .build(); } diff --git a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/ResourceController.java b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/ResourceController.java index 1316a6b25..12808e6f9 100644 --- a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/ResourceController.java +++ b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/controller/ResourceController.java @@ -4,19 +4,19 @@ import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.admin.api.ResourceService; import cn.iocoder.mall.admin.api.bo.ResourceBO; import cn.iocoder.mall.admin.api.constant.ResourceType; +import cn.iocoder.mall.admin.api.dto.ResourceAddDTO; import cn.iocoder.mall.admin.application.convert.ResourceConvert; -import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.admin.application.vo.AdminMenuTreeNodeVO; +import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder; import com.alibaba.dubbo.config.annotation.Reference; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; @RestController @@ -24,11 +24,13 @@ import java.util.stream.Collectors; @Api("资源模块") public class ResourceController { - @Reference + @Reference(validation = "true") private ResourceService resourceService; + // =========== 当前管理员相关的资源 API =========== + @GetMapping("/admin_menu_tree") - @ApiOperation(value = "获得管理员拥有的菜单权限", notes = "以树结构返回") + @ApiOperation(value = "获得当前登陆的管理员拥有的菜单权限", notes = "以树结构返回") public CommonResult> adminMenuTree() { List resources = resourceService.getResourceByTypeAndRoleIds(ResourceType.MENU, AdminSecurityContextHolder.getContext().getRoleIds()); // 创建 AdminMenuTreeNodeVO Map @@ -53,9 +55,36 @@ public class ResourceController { } @GetMapping("/admin_url_list") - @ApiOperation(value = "获得管理员拥有的 URL 权限列表") - public CommonResult adminUrlList() { - return null; + @ApiOperation(value = "获得当前登陆的管理员拥有的 URL 权限列表") +// @ApiModelProperty(value = "data", example = "['/admin/role/add', '/admin/role/update']") 没效果 + public CommonResult> adminUrlList() { + List resources = resourceService.getResourceByTypeAndRoleIds(ResourceType.URL, AdminSecurityContextHolder.getContext().getRoleIds()); + return CommonResult.success(resources.stream().map(ResourceBO::getHandler).collect(Collectors.toSet())); + } + + + // =========== 资源管理 API =========== + + // TODO 芋艿,注释 + @PostMapping("/add") + @ApiOperation(value = "创建资源", notes = "例如说,菜单资源,Url 资源") + public void add(@RequestParam("name") String name, + @RequestParam("type") Integer type, + @RequestParam("sort") Integer sort, + @RequestParam("displayName") String displayName, + @RequestParam("pid") Integer pid, + @RequestParam("handler") String handler) { + ResourceAddDTO resourceAddDTO = new ResourceAddDTO().setName(name).setType(type).setSort(sort) + .setDisplayName(displayName).setPid(pid).setHandler(handler); + CommonResult result = resourceService.addResource(resourceAddDTO); + } + + public void update() { + + } + + public void delete() { + } } \ No newline at end of file diff --git a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/AdminMenuTreeNodeVO.java b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/AdminMenuTreeNodeVO.java index 39faf1f18..1c9741570 100644 --- a/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/AdminMenuTreeNodeVO.java +++ b/admin/admin-application/src/main/java/cn/iocoder/mall/admin/application/vo/AdminMenuTreeNodeVO.java @@ -1,28 +1,22 @@ package cn.iocoder.mall.admin.application.vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + import java.util.List; +@ApiModel("管理员拥有的菜单 VO") public class AdminMenuTreeNodeVO { - /** - * 菜单编号 - */ + @ApiModelProperty(value = "菜单编号", required = true, example = "1") private Integer id; - /** - * 彩蛋名 - */ + @ApiModelProperty(value = "菜单名", required = true, example = "商品管理") private String name; - /** - * 操作 - */ + @ApiModelProperty(value = "菜单操作", required = true, example = "/order/list") private String handler; - /** - * 父菜单编号 - */ + @ApiModelProperty(value = "父菜单编号", required = true, example = "1", notes = "如果无父菜单,则值为 0") private Integer pid; - /** - * 子节点数组 - */ + @ApiModelProperty(value = "子节点数组", example = "[1, 2, 3]") private List children; public Integer getId() { diff --git a/admin/admin-application/src/main/resources/application.yaml b/admin/admin-application/src/main/resources/application.yaml index e6d37fdf2..ed6019ec3 100644 --- a/admin/admin-application/src/main/resources/application.yaml +++ b/admin/admin-application/src/main/resources/application.yaml @@ -4,4 +4,4 @@ spring: # server server: - port: 8083 \ No newline at end of file + port: 18083 \ No newline at end of file diff --git a/admin/admin-sdk/pom.xml b/admin/admin-sdk/pom.xml index 16f78d67f..86b96fe90 100644 --- a/admin/admin-sdk/pom.xml +++ b/admin/admin-sdk/pom.xml @@ -8,6 +8,7 @@ 1.0-SNAPSHOT 4.0.0 + jar admin-sdk diff --git a/admin/admin-service-api/pom.xml b/admin/admin-service-api/pom.xml index bb3089468..b683c2b0f 100644 --- a/admin/admin-service-api/pom.xml +++ b/admin/admin-service-api/pom.xml @@ -8,6 +8,7 @@ 1.0-SNAPSHOT 4.0.0 + jar admin-service-api @@ -17,9 +18,8 @@ 1.0-SNAPSHOT - cn.iocoder.mall - admin-service-api - 1.0-SNAPSHOT + org.hibernate.validator + hibernate-validator diff --git a/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/ResourceService.java b/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/ResourceService.java index 4baeaa912..61f54a5c3 100644 --- a/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/ResourceService.java +++ b/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/ResourceService.java @@ -1,6 +1,8 @@ package cn.iocoder.mall.admin.api; +import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.admin.api.bo.ResourceBO; +import cn.iocoder.mall.admin.api.dto.ResourceAddDTO; import java.util.List; import java.util.Set; @@ -9,4 +11,6 @@ public interface ResourceService { List getResourceByTypeAndRoleIds(Integer type, Set roleIds); + CommonResult addResource(ResourceAddDTO resourceAddDTO); + } \ No newline at end of file diff --git a/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/ResourceAddDTO.java b/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/ResourceAddDTO.java new file mode 100644 index 000000000..ae3a41e8f --- /dev/null +++ b/admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/ResourceAddDTO.java @@ -0,0 +1,94 @@ +package cn.iocoder.mall.admin.api.dto; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 资源添加 DTO + */ +public class ResourceAddDTO { + + /** + * 资源名字(标识) + */ + @NotEmpty(message = "资源名字不能为空") + private String name; + /** + * 类型 + */ + @NotNull(message = "类型不能为空") + private Integer type; + /** + * 排序值 + */ + @NotNull(message = "类型不能为空") + private Integer sort; + /** + * 展示名 + */ + @NotEmpty(message = "资源名字不能为空") + private String displayName; + /** + * 父资源比那好 + */ + private Integer pid; + /** + * 操作 + */ + private String handler; + + public String getName() { + return name; + } + + public ResourceAddDTO setName(String name) { + this.name = name; + return this; + } + + public Integer getType() { + return type; + } + + public ResourceAddDTO setType(Integer type) { + this.type = type; + return this; + } + + public Integer getSort() { + return sort; + } + + public ResourceAddDTO setSort(Integer sort) { + this.sort = sort; + return this; + } + + public String getDisplayName() { + return displayName; + } + + public ResourceAddDTO setDisplayName(String displayName) { + this.displayName = displayName; + return this; + } + + public Integer getPid() { + return pid; + } + + public ResourceAddDTO setPid(Integer pid) { + this.pid = pid; + return this; + } + + public String getHandler() { + return handler; + } + + public ResourceAddDTO setHandler(String handler) { + this.handler = handler; + return this; + } + +} \ No newline at end of file diff --git a/admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/service/ResourceServiceImpl.java b/admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/service/ResourceServiceImpl.java index 7f796065c..cbfb165fd 100644 --- a/admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/service/ResourceServiceImpl.java +++ b/admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/service/ResourceServiceImpl.java @@ -1,7 +1,9 @@ package cn.iocoder.mall.admin.service; +import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.admin.api.ResourceService; import cn.iocoder.mall.admin.api.bo.ResourceBO; +import cn.iocoder.mall.admin.api.dto.ResourceAddDTO; import cn.iocoder.mall.admin.convert.ResourceConvert; import cn.iocoder.mall.admin.dao.ResourceMapper; import cn.iocoder.mall.admin.dataobject.ResourceDO; @@ -13,7 +15,7 @@ import java.util.List; import java.util.Set; @Service -@com.alibaba.dubbo.config.annotation.Service +@com.alibaba.dubbo.config.annotation.Service(validation = "true") public class ResourceServiceImpl implements ResourceService { @Autowired @@ -31,4 +33,9 @@ public class ResourceServiceImpl implements ResourceService { return ResourceConvert.INSTANCE.convert(resourceMapper.selectListByTypeAndRoleIds(type, roleIds)); } + @Override + public CommonResult addResource(ResourceAddDTO resourceAddDTO) { + return null; + } + } \ No newline at end of file diff --git a/admin/admin-service-impl/src/main/resources/config/application.yaml b/admin/admin-service-impl/src/main/resources/config/application.yaml index d5fa428f0..d6184dea6 100644 --- a/admin/admin-service-impl/src/main/resources/config/application.yaml +++ b/admin/admin-service-impl/src/main/resources/config/application.yaml @@ -1,14 +1,10 @@ spring: # datasource datasource: - url: jdbc:mysql://127.0.0.1:33061/mall_admin?useSSL=false + url: jdbc:mysql://180.167.213.26:13306/mall_admin?useSSL=false driver-class-name: com.mysql.jdbc.Driver username: root - password: 123456 - -# server -server: - port: 8083 + password: ${MALL_MYSQL_PASSWORD} # mybatis mybatis: @@ -26,7 +22,4 @@ dubbo: port: -1 name: dubbo scan: - base-packages: cn.iocoder.mall.admin.service -demo: - service: - version: 1.0.0 \ No newline at end of file + base-packages: cn.iocoder.mall.admin.service \ No newline at end of file diff --git a/build_admin.sh b/build_admin.sh new file mode 100644 index 000000000..0a5a3ea81 --- /dev/null +++ b/build_admin.sh @@ -0,0 +1 @@ +mvn clean package -am -DskipTests \ No newline at end of file diff --git a/common/common-framework/pom.xml b/common/common-framework/pom.xml index 8ffb4f056..d8f9e472f 100644 --- a/common/common-framework/pom.xml +++ b/common/common-framework/pom.xml @@ -44,6 +44,11 @@ jackson-annotations 2.9.7 + + org.hibernate.validator + hibernate-validator + 6.0.15.Final + diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/config/GlobalExceptionHandler.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/config/GlobalExceptionHandler.java index 3e3123e24..5020c32a9 100644 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/config/GlobalExceptionHandler.java +++ b/common/common-framework/src/main/java/cn/iocoder/common/framework/config/GlobalExceptionHandler.java @@ -3,13 +3,14 @@ package cn.iocoder.common.framework.config; import cn.iocoder.common.framework.constant.SysErrorCodeEnum; import cn.iocoder.common.framework.exception.ServiceException; import cn.iocoder.common.framework.util.ExceptionUtil; -import cn.iocoder.common.framework.vo.RestResult; +import cn.iocoder.common.framework.vo.CommonResult; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; +import javax.validation.ConstraintViolationException; import java.lang.reflect.UndeclaredThrowableException; @ControllerAdvice @@ -17,33 +18,49 @@ public class GlobalExceptionHandler { @ResponseBody @ExceptionHandler(value = ServiceException.class) - public RestResult serviceExceptionHandler(HttpServletRequest req, ServiceException ex) { - return RestResult.error(ex.getCode(), ex.getMessage()); + public CommonResult serviceExceptionHandler(HttpServletRequest req, ServiceException ex) { + return CommonResult.error(ex.getCode(), ex.getMessage()); + } + + @ResponseBody + @ExceptionHandler(value = ConstraintViolationException.class) + public CommonResult constraintViolationExceptionHandler(HttpServletRequest req, ConstraintViolationException ex) { + // TODO 芋艿,后续要想一个更好的方式。 + // 拼接详细报错 + StringBuilder detailMessage = new StringBuilder("\n\n详细错误如下:"); + ex.getConstraintViolations().forEach(constraintViolation -> detailMessage.append("\n").append(constraintViolation.getMessage())); + return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getMessage() + + detailMessage.toString()); } @ResponseBody @ExceptionHandler(value = UndeclaredThrowableException.class) - public RestResult undeclaredThrowableExceptionHandler(HttpServletRequest req, UndeclaredThrowableException e) { + public CommonResult undeclaredThrowableExceptionHandler(HttpServletRequest req, UndeclaredThrowableException e) { // 尝试获得 ServiceException 异常。如果是,则使用 serviceExceptionHandler 方法处理。 ServiceException serviceException = ExceptionUtil.getServiceException(e); if (serviceException != null) { return serviceExceptionHandler(req, serviceException); } + // 尝试获得 ConstraintViolationException 异常。如果是, + ConstraintViolationException constraintViolationException = ExceptionUtil.getConstraintViolationException(e); + if (constraintViolationException != null) { + return constraintViolationExceptionHandler(req, constraintViolationException); + } // 获得不到,使用 异常日志 方法处理。 return resultExceptionHandler(req, e); } @ResponseBody @ExceptionHandler(value = Exception.class) - public RestResult resultExceptionHandler(HttpServletRequest req, Exception e) { + public CommonResult resultExceptionHandler(HttpServletRequest req, Exception e) { // TODO 异常日志 e.printStackTrace(); // TODO 翻译不同的异常 if (e instanceof MissingServletRequestParameterException) { - return RestResult.error(SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getCode(), SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getMessage()); + return CommonResult.error(SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getCode(), SysErrorCodeEnum.MISSING_REQUEST_PARAM_ERROR.getMessage()); } // 返回 - return RestResult.error(SysErrorCodeEnum.SYS_ERROR.getCode(), SysErrorCodeEnum.SYS_ERROR.getMessage()); + return CommonResult.error(SysErrorCodeEnum.SYS_ERROR.getCode(), SysErrorCodeEnum.SYS_ERROR.getMessage()); } } \ No newline at end of file diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/constant/SysErrorCodeEnum.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/constant/SysErrorCodeEnum.java index d0ddbbed1..cdf3a8126 100644 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/constant/SysErrorCodeEnum.java +++ b/common/common-framework/src/main/java/cn/iocoder/common/framework/constant/SysErrorCodeEnum.java @@ -9,6 +9,7 @@ public enum SysErrorCodeEnum { SYS_ERROR(2001001000, "服务端发生异常"), MISSING_REQUEST_PARAM_ERROR(2001001001, "参数缺失"), + VALIDATION_REQUEST_PARAM_ERROR(2001001002, "参数校验不正确") ; private final int code; diff --git a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java index 02f9af696..88bab3d7e 100644 --- a/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java +++ b/common/common-framework/src/main/java/cn/iocoder/common/framework/util/ExceptionUtil.java @@ -2,6 +2,7 @@ package cn.iocoder.common.framework.util; import cn.iocoder.common.framework.exception.ServiceException; +import javax.validation.ConstraintViolationException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.UndeclaredThrowableException; @@ -31,4 +32,16 @@ public class ExceptionUtil { return null; } + public static ConstraintViolationException getConstraintViolationException(UndeclaredThrowableException e) { + Throwable undeclaredThrowable = e.getUndeclaredThrowable(); + if (undeclaredThrowable instanceof InvocationTargetException) { + InvocationTargetException invocationTargetException = (InvocationTargetException) undeclaredThrowable; + Throwable targetException = invocationTargetException.getTargetException(); + if (targetException != null && targetException instanceof ConstraintViolationException) { + return (ConstraintViolationException) targetException; + } + } + return null; + } + } \ No newline at end of file diff --git a/publish_admin.sh b/publish_admin.sh new file mode 100644 index 000000000..a9a2ca64c --- /dev/null +++ b/publish_admin.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +sh build_admin.sh +scp admin/admin-application/target/admin-application-1.0-SNAPSHOT.jar runner@192.168.88.10:/work2/project/admin \ No newline at end of file