人才网站建设,公司网址怎么做出来的,设计单网站建设,沧州做网站最好的公司先建立一个Maven
springboot项目
进来先把src删掉#xff0c;因为是一个父项目#xff0c;我们删掉src之后#xff0c;pom里配置的东西#xff0c;也能给别的模块使用。 改一下springboot的版本号码
加入依赖和依赖管理#xff1a;
propertiesjava.versi…先建立一个Maven
springboot项目
进来先把src删掉因为是一个父项目我们删掉src之后pom里配置的东西也能给别的模块使用。 改一下springboot的版本号码
加入依赖和依赖管理
propertiesjava.version1.8/java.versionspring-cloud-alibaba.version2.2.2.RELEASE/spring-cloud-alibaba.versionspring-cloud.versionHoxton.SR8/spring-cloud.versionmybatis-plus.version3.4.1/mybatis-plus.versionvelocity.version2.0/velocity.versionswagger.version2.9.2/swagger.versionswagger-bootstrap-ui.version1.9.2/swagger-bootstrap-ui.versioncommons-lang3.version3.9/commons-lang3.versioncommons-fileupload.version1.3.1/commons-fileupload.versioncommons-io.version2.6/commons-io.versionalibaba.easyexcel.version2.1.1/alibaba.easyexcel.versionapache.xmlbeans.version3.1.0/apache.xmlbeans.versionfastjson.version1.2.28/fastjson.versiongson.version2.8.2/gson.versionjson.version20170516/json.versionaliyun-java-sdk-core.version4.3.3/aliyun-java-sdk-core.versionaliyun-sdk-oss.version3.10.2/aliyun-sdk-oss.versionjodatime.version2.10.1/jodatime.versionjwt.version0.7.0/jwt.versionhttpclient.version4.5.1/httpclient.version
/propertiesdependencyManagementdependencies!--Spring Cloud--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency!--Spring Cloud Alibaba--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency!--mybatis-plus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion${mybatis-plus.version}/version/dependency!--mybatis-plus 代码生成器--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion${mybatis-plus.version}/version/dependency!-- Mybatis Plus 代码生成器模板引擎, --dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion${velocity.version}/version/dependency!--swagger--dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion${swagger.version}/version/dependency!--swagger ui--dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion${swagger.version}/version/dependency!--swagger-bootstrap-ui--dependencygroupIdcom.github.xiaoymin/groupIdartifactIdswagger-bootstrap-ui/artifactIdversion${swagger-bootstrap-ui.version}/version/dependency!--commons-lang3--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion${commons-lang3.version}/version/dependency!--文件上传--dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion${commons-fileupload.version}/version/dependency!--commons-io--dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion${commons-io.version}/version/dependency!--excel解析--dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion${alibaba.easyexcel.version}/version/dependency!--excel解析依赖--dependencygroupIdorg.apache.xmlbeans/groupIdartifactIdxmlbeans/artifactIdversion${apache.xmlbeans.version}/version/dependency!--json--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion${fastjson.version}/version/dependencydependencygroupIdorg.json/groupIdartifactIdjson/artifactIdversion${json.version}/version/dependencydependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion${gson.version}/version/dependency!--阿里云SDK远程调用--dependencygroupIdcom.aliyun/groupIdartifactIdaliyun-java-sdk-core/artifactIdversion${aliyun-java-sdk-core.version}/version/dependency!--阿里云文件管理--dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion${aliyun-sdk-oss.version}/version/dependency!--日期时间工具--dependencygroupIdjoda-time/groupIdartifactIdjoda-time/artifactIdversion${jodatime.version}/version/dependency!--jwt工具--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion${jwt.version}/version/dependency!--httpclient--dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion${httpclient.version}/version/dependency/dependencies
/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
/dependencies创建硅谷comment
创建一个工具模块。
创建一个Maven项目就ok了
是个WEB项目guigu-common的pom里需要加上web依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--lombok用来简化实体类需要安装lombok插件--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency
/dependencies创建模块service-base
1、创建Maven模块 在srb下创建普通maven模块 Groupcom.atguigu Artifactservice-base
在service-base里面引入依赖 引入独立的依赖
service-core
在srb下创建普通maven模块 Groupcom.atguigu Artifactservice-core
依赖
dependenciesdependencygroupIdcom.atguigu/groupIdartifactIdservice-base/artifactIdversion0.0.1-SNAPSHOT/version/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--mybatis-plus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactId/dependency!--mybatis-plus 代码生成器--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactId/dependency!-- Mybatis Plus 代码生成器模板引擎, --dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactId/dependency
/dependencies积分接口
积分等级表 控制管理員登錄的controller CrossOrigin //检查跨域
RestController
RequestMapping(/admin/core/integralGrade)
public class AdminIntegralGradeController {Resourceprivate IntegralGradeService integralGradeService;GetMapping(/list)public ListIntegralGrade listAll(){return integralGradeService.list();}}檢查好跨域和注解 启动起来访问一下试试
在这里插入代码片为了使用方便统一给数据定义一个返回值
{code: 数字, //业务响应码message: 字符串, //返回消息data: 对象 //返回数据
}使用枚举的方式实现这一点。
在这个下面定义 注意包名字要能被掃描進入
package com.atguigu.srb;//枚举import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;Getter
AllArgsConstructor
ToString
public enum ResponseEnum {SUCCESS(-1,成功),ERROR(0,成功);//枚举成员之间用逗号//枚举类型没办法用DATAprivate Integer code;private String message;//枚举中的变量}
先弄个枚举用来代表特定值。
然后设置R值我们返回给前端的东西通通通过R值进行返回。
package com.atguigu.srb;import lombok.Data;import java.util.HashMap;
import java.util.Map;Data
public class R {//的三个部分中有一个是一个对象比较好private Integer code;private String message;private MapString,Object data new HashMap();private R(){}//表示返回成功public static R ok(){R r new R();r.setCode(ResponseEnum.SUCCESS.getCode());r.setMessage(ResponseEnum.SUCCESS.getMessage());return r;}//表示返回失败public static R error(){R r new R();r.setCode(ResponseEnum.ERROR.getCode());r.setMessage(ResponseEnum.ERROR.getMessage());return r;}//表示返回别的可能//传递一个别的参数进来public static R setResult(ResponseEnum responseEnum){//参数是枚举类型的R r new R();r.setCode(responseEnum.getCode());r.setMessage(responseEnum.getMessage());return r;}}
R的对象用MAP毕竟灵活一些。
package com.atguigu.srb;//枚举import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;Getter
AllArgsConstructor
ToString
public enum ResponseEnum {SUCCESS(-1,成功),ERROR(0,服务器内部问题);//枚举成员之间用逗号//枚举类型没办法用DATAprivate Integer code;private String message;//枚举中的变量}
先用枚举定义一些特殊数据如何处理
然后用R来定义返回状态
返回状态中 返回码和message都是可以通过枚举定义的然后如果我们返回成功了那么就要设置个ok函数方便调用ok函数实际上就是讲枚举中的成功码注入进去了改变了code和message值
如果返回失败了就要返回给error函数同理然后我们再写一个注入R的数据值。
package com.atguigu.srb;import lombok.Data;import java.util.HashMap;
import java.util.Map;Data
public class R {//的三个部分中有一个是一个对象比较好private Integer code;private String message;private MapString,Object data new HashMap();private R(){}//表示返回成功public static R ok(){//r一旦调用这个函数就说明内部的三个值被设置好了R r new R();r.setCode(ResponseEnum.SUCCESS.getCode());r.setMessage(ResponseEnum.SUCCESS.getMessage());return r;}//表示返回失败public static R error(){R r new R();r.setCode(ResponseEnum.ERROR.getCode());r.setMessage(ResponseEnum.ERROR.getMessage());return r;}//表示返回别的可能//传递一个别的参数进来public static R setResult(ResponseEnum responseEnum){//参数是枚举类型的R r new R();r.setCode(responseEnum.getCode());r.setMessage(responseEnum.getMessage());return r;}public R data(String name,Object value){//往R里装数据将R的data通过这个函数装上数据然后返回回去this.data.put(name,value);return this;}}
后面应用的时候所有函数必须返回的是R值
package com.atguigu.srb.core.controller.admin;import com.atguigu.srb.R;
import com.atguigu.srb.core.pojo.entity.IntegralGrade;
import com.atguigu.srb.core.service.IntegralGradeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.List;/*** p* 积分等级表 前端控制器* /p** author Helen* since 2023-02-08*/Api(tags 积分等级管理)
CrossOrigin //检查跨域
RestController
RequestMapping(/admin/core/integralGrade)
public class AdminIntegralGradeController {Resourceprivate IntegralGradeService integralGradeService;Resourceprivate R r;//把r注入进来也行GetMapping(/list)public R listAll(){ListIntegralGrade list integralGradeService.list();//将数据交给R进行返回//先进行判空操作if(list ! null ){r.ok().data(list,list);//之所以前面都是静态的是为了不创建对象不产生耦合//ok返回的都是r对象也是为了能串联到一起去形成一个串}return r;}//代表从浏览器给个数据ApiOperation(value 根据id删除)DeleteMapping(/remove/{id})public boolean removeById(PathVariable Long id){return integralGradeService.removeById(id);}}
简单来说就是将结果直接包装成R样子然后R的ok和error直接调用R的函数就不要包装饿了。
异常切面
在主要业务之外统一管理异常 加上注解之后所有异常都过来了 增加扫描范围 package com.atguigu.srb.exception;import com.atguigu.srb.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;Slf4j
RestControllerAdvice
public class HandlerException {ExceptionHandler(value Exception.class)public R handleException(Exception e){log.error(e.getMessage(),e);return R.error(); }}
捕捉特殊异常 //专门特意捕获这个异常ExceptionHandler(BadSqlGrammarException.class)public R handleBadSqlGrammarException(BadSqlGrammarException e){log.error(e.getMessage(), e);//这个是我们在result的枚举里添加的异常return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR);}自定義異常
必须是运行时异常而且我们要继承运行时异常
自己定义一个异常我们可以可以随时把这个异常抛出去中断交易 我們在交易中出現問題可以直接把異常跑出去中斷掉程序
我们自己定义了个异常类 一定要继承运行时异常方法 別忘記設計捕獲
controller
controller上层异常 批量處理直接複製就行
/*** Controller上一层相关异常*/
ExceptionHandler({NoHandlerFoundException.class,HttpRequestMethodNotSupportedException.class,HttpMediaTypeNotSupportedException.class,MissingPathVariableException.class,MissingServletRequestParameterException.class,TypeMismatchException.class,HttpMessageNotReadableException.class,HttpMessageNotWritableException.class,MethodArgumentNotValidException.class,HttpMediaTypeNotAcceptableException.class,ServletRequestBindingException.class,ConversionNotSupportedException.class,MissingServletRequestPartException.class,AsyncRequestTimeoutException.class})
public R handleServletException(Exception e) {log.error(e.getMessage(), e);//SERVLET_ERROR(-102, servlet请求异常),return R.error().message(ResponseEnum.SERVLET_ERROR.getMessage()).code(ResponseEnum.SERVLET_ERROR.getCode());
}放在這裏