开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块

①、配置文件,添加各个服务模块的路由路径

yml 复制代码
gateway:
	routes:
		-id: server-cart #微服务名称
		uri: lb://service-cart  #负责均衡
		predicates:
			- Path=/api/order/cart/**

ThreadLocal

①、定义一个工具类

java 复制代码
public class AuthContextUtil{
	
	private static final ThreadLocal<SysUser> threadLocal = new ThreadLocal<>();

	//存储数据
	public static void set(SysUser sysUser){
		threadLocal.set(sysUser);
	}
	
	//获取数据
	public static SysUser get(){
		return threadLocal.get();
	} 

	//删除数据
	public static void remove(){
		threadLocal.remove();
	}
}

②、业务方法中使用

java 复制代码
@GetMapping(value="/getUserInfo")
public Result getUserInfo(){
	return Result.build(AuthConextUtil.get(),ResultCodeEnum.SUCCESS); //从ThreadLocal中获取用户信息
}

远程调用

购物车服务模块------>商品服务模块中的数据

①、service-client模块将调用接口单独剥离出来作为调用接口端

添加依赖:spring-cloud-starter-openfeign spring-cloud-loadbalancer

创建远程调用接口

java 复制代码
@FeignClient(value="service-product") //value的值和service-product模块中配置文件服务名称一致
public interface ProductFeignClient{
	
	@GetMapping("/api/product/getBySkuId/{skuId}")
	public ProductSku getBySkuId(@PathVariable("skuId") Long skuId);
}

②、service-cart模块中引入service-client模块坐标

启动类上添加注解

java 复制代码
@EnableFeignClients(basePackages = {"com.michael.spzx"})
@EnableUserLoginAuthInterceptor //该注解是针对ThreadLocal存入的用户信息
java 复制代码
@Autowired
private ProductFeignClient productFeignClient;//将接口进行注入

//方法中,调用即可

③、service-product模块服务提供

service/mapper省略

java 复制代码
@GetMapping("/getbySkuId/{skuId}")
public ProductSku getBySkuId(@PathVariable Long skuId){
	ProductSku productSku = productService.getBySkuId(skuId);
	return productSku;
}

读取配置文件

①、配置文件

配置文件的相互导入

application-alipay.yml

yml 复制代码
spzx:
	applipay:  #值省略
		allipay_url: 
		app_id: 
		app_private_key: 
		return_payment_url:
		notify_payment_url:

application-dev.yml中进行引入

yml 复制代码
spring:
	config:
		import: application-alipay.yml

②、定义实体类读取配置文件

java 复制代码
@Data
@ConfigurationProperties(prefix="apzx.alipay")
public class AlipayProperties{
	
	private String alipayUrl; //属性名和配置文件中的保持一致
	private String appPrivateKey;
	public String alipayPublicKey;
	private String appId;
	public String returnPaymentUrl;
	public String notifyPaymentUrl;

	public final static String format="json";
	public final static String charset="utf-8";
	public final static String sign_type="RSA2"
}

③、启动类添加注解

java 复制代码
@EnableConfigurationProperties(value={AlipayProperties.class})

统一异常

①、创建异常定义

java 复制代码
@ControllerAdvice //给Controller增加一个统一操作
public class GlobalExceptionHandler{
	
	//全局异常处理
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public Result error(){
		return Result.build(null,ResultCodeEnum,SYSTEM_ERROR);
	}

	//引入自定义异常
	@ExceptionHandler(GuiGuException.class)
	@ResponseBody
	public Result error(GuiguException e){
		return Result.build(null,e.getResultCodeEnum());
	}
}
java 复制代码
/**
	自定义异常
*/
@Data
public class GuiguException extends RuntimeException{
	
	private Integer code;
	private String message;

	private ResultCodeEnum resultCodeEnum; //枚举类封装的错误状态码和错误信息

	public GuiguExcetion(ResultCodeEnum resultCodeEnum){
		this.resultCodeEnum = resultCodeEnum;
		this.code = resultCodeEnum.getCode;
		this.message = resultCodeEnum.getMessage();
	}

	public GuiguExcetion(Integer code,String message){
		this.code = code;
		this.message = message;
	}
}

②、Service业务类使用

java 复制代码
if(sysUser == null){
	//throw new RuntimeException("用户名或密码错误");
	//改成自定义异常
	throw new GuiguException(ResultCodeEnum.LOGIN_ERROR);
}
相关推荐
TomCode先生几秒前
c#动态树形表达式详解
开发语言·c#
高-老师32 分钟前
基于R语言的物种气候生态位动态量化与分布特征模拟
开发语言·r语言·物种气候
大翻哥哥1 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
weixin_437830942 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
鹿鹿学长2 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
zhousenshan2 小时前
Python爬虫常用框架
开发语言·爬虫·python
IMER SIMPLE2 小时前
人工智能-python-深度学习-经典神经网络AlexNet
人工智能·python·深度学习
CodeCraft Studio3 小时前
国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
python·html·word·markdown·国产化·spire.doc·文档格式转换
DKPT3 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
专注API从业者3 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python