第一步:定义注解
用于aop方法执行时拦截并定义相关信息
20240504新增修改,添加了service方法和file方法
import org.springframework.http.HttpMethod;
import java.lang.annotation.*;
/**
* 远程调用注解
*
* @author zhu.zn 2024/4/30 18:13
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RemoteCall {
/**
* 用于拿到yml配置的url和和header配置
* @return 相关服务的key
*/
String service();
/**
* 请求路径
* @return 请求接口的路径
*/
String path();
/**
* 请求方式
* @return 请求的Http方式
*/
HttpMethod method() default HttpMethod.GET;
/**
* 请求头
* @return 额外请求头设置
*/
String[] headers() default {
};
/**
* GET请求
* 查询参数字段名称
* @return 查询参数字段名称
*/
String[] params() default {
};
/**
* POST请求
* 请求体
* @return 请求体
*/
String body() default "";
/**
* path模板的参数名称
* @return 参数名称
*/
String[] variable() default {
};
/**
* 文件参数名称必须为文件路径
* @return 文件
*/
String file() default "";
}
yml配置项
neil:
rest:
service:
test:
url: http://localhost:8080
headers:
appid: test
secret: 123456
读取相关service配置方法
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@Data
@Configuration
@ConfigurationProperties(prefix = "neil.rest")
public class RestTemplateConfig {
private Map<String, ServiceConfig> service;
@Data
public static class ServiceConfig {
private String url;
private Map<String, String> headers;
}
public ServiceConfig getServiceConfig(String serviceName) {
return service.get(serviceName);
}
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
//ms毫秒
factory.setReadTimeout(5000);
//ms毫秒
factory.setConnectTimeout(15000);
return factory;
}
第二步:定义Aspect
2024004新增service和文件上传支持
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.neil.common.aspect.annotation.RemoteCall;
import org.neil.common.resource.MyInputStreamResource;
import org.neil.config.RestTemplateConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.core.io.FileSystemResource;
import org