例如 //// 带有 @Configuration 注解的 RestConfig 类
在 Spring 框架中,带有 `@Configuration` 注解的 `RestConfig` 类通常用于**集中配置与 RESTful API 相关的组件或行为**。根据类名和常见实践,它的作用可能包括以下场景:
---
### 1. **配置 REST 客户端(如 `RestTemplate` 或 `WebClient`)**
- **定义 HTTP 客户端的行为**:设置超时时间、连接池、默认请求头等。
- **示例代码**:
```java
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
// 设置超时时间(单位:毫秒)
((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory())
.setConnectTimeout(5000);
return restTemplate;
}
```
---
### 2. **自定义序列化/反序列化规则**
- **配置 JSON 转换器**:例如统一日期格式、处理空值、忽略未知字段等。
- **示例代码**:
```java
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
converter.setObjectMapper(objectMapper);
return converter;
}
```
---
### 3. **添加全局拦截器(Interceptor)**
- **统一处理请求/响应**:例如添加认证 Token、记录请求日志、统一异常处理等。
- **示例代码**:
```java
@Bean
public ClientHttpRequestInterceptor authInterceptor() {
return (request, body, execution) -> {
request.getHeaders().add("Authorization", "Bearer " + getToken());
return execution.execute(request, body);
};
}
// 将拦截器添加到 RestTemplate
@Bean
public RestTemplate restTemplate(List<ClientHttpRequestInterceptor> interceptors) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
```
---
### 4. **配置跨域请求(CORS)**
- **允许跨域访问**:定义允许的域、方法、请求头等。
- **示例代码**:
```java
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST");
}
};
}
```
---
### 5. **集成第三方 REST 工具**
- **配置 Feign Client、Retrofit 等**:例如设置编解码器、负载均衡策略。
- **示例代码**:
```java
@Bean
public Encoder feignEncoder() {
return new JacksonEncoder();
}
```
---
### 总结
`RestConfig` 类的核心目的是**统一管理 REST 相关的配置**,例如:
- 定义和定制 HTTP 客户端行为
- 统一数据格式转换规则
- 添加全局拦截逻辑
- 解决跨域问题
- 集成第三方 REST 工具
具体实现会根据项目需求调整,但核心逻辑是**通过 `@Bean` 方法向 Spring 容器注册组件**,确保这些组件在整个应用中生效。
1109

被折叠的 条评论
为什么被折叠?



