长沙做网站开发价格企业网站的作用有哪些
java 17+ cloud 2023.0.0 boot 3.2.0 cloud alibaba 2022.0.0.0-Rc2 maven 3.9+ mysql 8.0+
一、创建项目
-
new project
-
聚合总父工程名字
-
字符编码
4.注解生效激活
5.java编译版本选17
6.file type 过滤
删除src
1.1maven中的dependencyManager
与dependencies
一般在项目最顶层pom
中看到dependencyManager
能让所有在子项目中引用一个依赖而不显示的列出版本号,maven会沿着父子层次向上走,知道找到一个拥有dependencyManagement
元素的项目,然后就会使用这个dependencyManagement
元素中指定的版本号
好处:如果有多个子项目都引用一样依赖,则可以避免在每个使用的子项目里面都声明一个版本号
-
当想升级或切换另一个版本的时候,只需要在顶层父容器更新,而不需要一个一个修改子项目
-
如果某个子项目需要另外一个版本,只需要声明version就可。
1.2跳过单元测试配置
1.3创建子项目
步骤
-
建module
-
改pom
-
写yml
-
主启动
-
写业务
1.4Swagger3
-
1.加注解
注解 | 标注位置 | 作用 |
---|---|---|
@Tag | controller类 | 标识controller作用 |
@Parameter | 参数 | 标识参数作用 |
@Parameters | 参数 | 参数多重说明 |
@Schema | modle层的javaBean | 描述魔性作用及每个属性 |
@Operation | 方法 | 描述方法作用 |
@ApiRestponse | 方法 | 描述响应状态码等 |
2.含分组迭代的Config配置类
package com.atguigu.cloud.config;import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Swagger3Config
{@Beanpublic GroupedOpenApi PayApi(){return GroupedOpenApi.builder().group("支付微服务模块").pathsToMatch("/pay/**").build();}@Beanpublic GroupedOpenApi OtherApi(){return GroupedOpenApi.builder().group("其它微服务模块").pathsToMatch("/other/**", "/others").build();}/*@Beanpublic GroupedOpenApi CustomerApi(){return GroupedOpenApi.builder().group("客户微服务模块").pathsToMatch("/customer/**", "/customers").build();}*/@Beanpublic OpenAPI docsOpenApi(){return new OpenAPI().info(new Info().title("cloud2024").description("通用设计rest").version("v1.0")).externalDocs(new ExternalDocumentation().description("www.hhf.com").url("https://yiyan.baidu.com/"));}
}
3.调试方式
http://localhost:8001/swagger-ui/index.html
1.5优化
1.完善日期时间格式
可以在相应类的属性上面使用@JsonFormat注解
@Column(name = "create_time")@Schema(title = "创建时间")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date createTime;@Column(name = "update_time")@Schema(title = "更新时间")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date updateTime;
如果是Spring Boot项目,也可以在application.yml文件中指定
spring:jackson:date-format:yyyy-MM-dd HH:mm:sstime-zone: GMT+8
2.统一返回值
思路:定义返回标准格式,3大标配
code状态值:由后端统一定义各种返回结果的状态码
message描述:本次接口调用的结果描述
data数据:本次返回的数据
扩展:接口调用时间之类,timestamp:接口调用时间
步骤:
1.新建枚举类ResturnCodeEnmu
HTTP请求返回状态码
ReturnCodeEnum
package com.atguigu.cloud.resp;import lombok.Getter;import java.util.Arrays;@Getter
public enum ReturnCodeEnum {RC999("999","操作xxx失败"),RC200("200", "success"),RC201("201", "服务器开启降级保护,请稍后再试"),RC202("202", "热点参数限流,请稍后再试"),RC203("203", "系统规则不满足要求,请稍后再试"),RC204("204", "授权规则不通过,请稍后再试"),RC403("403", "无访问权限,请联系管理员授予权限"),RC401("401", "匿名用户访问无权限资源时的异常"),RC404("404", "404页面找不到的异常"),RC500("500", "系统异常请稍后再试"),RC375("375", "数学运算异常,请稍后再试"),INVALID_YOKEN("2001","访问令牌不合法"),ACCESS_DENIED("2003","没有权限访问该资源"),CLIENT_AUTHENTICATION_FAILED("1001","客户端认证失败"),USERNAME_OR_PASSWORD_ERROE("1002","用户名或密码错误"),BUSINESS_ERROR("1004","业务逻辑异常"),UNSUPPORTED_GRANT_TYPE("1003","不支持的认证模式");private final String code;private final String message;ReturnCodeEnum(String code, String message) {this.code = code;this.message = message;}/*** 如何定义一个通用的枚举类* 举值-构造-遍历*///传统版//3.1public static ReturnCodeEnum getReturnCodeEnum(String code){for (ReturnCodeEnum element : ReturnCodeEnum.values()) {if(element.getCode().equalsIgnoreCase(code)){return element;}}return null;}//3.2Stream流式计算public static ReturnCodeEnum getReturnEnum1(String code){return Arrays.stream(ReturnCodeEnum.values()).filter(x -> x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null);} }
2.新建统一定义返回对象ResultData
1.6全局异常处理
为什么需要全局异常处理器,不在手写try...catch
新建全局异常类GlobalExecptionHandler
package com.atguigu.cloud.exp;import com.atguigu.cloud.resp.ResultData;
import com.atguigu.cloud.resp.ReturnCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;@Slf4j
@RestControllerAdvice
public class GlobalExexptionHandler {@ExceptionHandler(RuntimeException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public ResultData<String> execption(Exception e){System.out.println("####come in GlobalExecptionHandler");log.error("全局异常信息:{}",e.getMessage(),e);return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());}
}
@GetMapping(value = "/pay/error")public ResultData<Integer> getPayError(){Integer i = Integer.valueOf(200);try{System.out.println("com in payerror test");int age = 10/0;}catch (Exception e){return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());}return ResultData.success(i);}