# spring-converter-enum
**Repository Path**: Devifish/spring-converter-enum
## Basic Information
- **Project Name**: spring-converter-enum
- **Description**: 为 Spring MVC 框架提供对 Enum 类型数据 param 到 enum object 转换
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2018-12-29
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-converter-enum
> 为 Spring MVC 框架提供对 Enum 类型数据 param 到 enum object 转换
> 同样也可用于 Spring Boot (包含 Spring MVC)
> 基于 Java 8 开发,所以运行环境必须 java 8 或 以上
## 安装
下载 releases 里已经构建过的 jar 附件,项目导入该 jar 包
也可 clone 代码直接 copy 至项目内使用
JAR:[**下载**](https://gitee.com/Devifish/spring-converter-enum/releases)
## 使用
#### 配置方法
##### XML 方法
```xml
```
#### Annotation 方法 (适用于Spring Boot)
```java
@Configuration
public class WebContextConfiguration {
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@PostConstruct
public void addConversionConfig() {
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) requestMappingHandlerAdapter.getWebBindingInitializer();
GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();
genericConversionService.addConverterFactory(new EnumConverterFactory());
}
}
```
#### 使用方法
项目内需要转换的 Enum类 需要实现 ConvertibleEnum接口
Spring MVC 即可实现 param 到 enum object 转换
```java
public enum LeaveType implements ConverterEnum {
病假(1), 事假(2), 婚假(3), 丧假(4), 其他(9);
private final int param;
LeaveType(int param) {
this.param = param;
}
@Override
public Integer param() {
return param;
}
}
```
如果使用了 Spring Data Jpa 的,想使数据库保存 param 值 而非 Enum index 的话
需要创建一个 jpa转换代理类
```java
public class LeaveTypeConverter extends BaseAttributeConverter {}
```
实体类成员或方法上添加
```java
@Convert(converter = LeaveTypeConverter.class)
private LeaveType leaveType;
```
或
```java
@Convert(converter = LeaveTypeConverter.class)
public LeaveType getLeaveType() {
return leaveType;
}
```