项目场景
将数据库中的数据通过vo类对象泛型枚举类返回中文给前端
自定义vo类中,对象类型规定为枚举类返回给前端,数据库中该参数对应中文
问题描述
返回给前端时该字段为空
枚举类无法通过getValue方法获取对应的name
枚举类示例:
public enum AliPayOrderStatusEnum implements IEnum<Integer> {
/**
* 订单状态枚举类
*/
INCOME(0, "生效"),
EXPENDITURE(1, "失效"),
REFUND(-1, "退款"),
OTHER(3, "其他");
AliPayOrderStatusEnum(Integer value, String name) {
this.value = value;
this.name = name;
}
public static AliPayOrderStatusEnum getEnumByValue(int value) {
for (AliPayOrderStatusEnum cityEnum : AliPayOrderStatusEnum.values()) {
if (cityEnum.getValue().equals(value)) {
return cityEnum;
}
}
return null;
}
// @JsonCreator
public static AliPayOrderStatusEnum getEnumByName(String name) {
for (AliPayOrderStatusEnum cityEnum : AliPayOrderStatusEnum.values()) {
if (StringUtils.equals(cityEnum.name, name)) {
return cityEnum;
}
}
return null;
}
@Override
public Integer getValue() {
return value;
}
@JsonValue
public String getName() {
return name;
}
private final Integer value;
private final String name;
@Override
public String toString() {
return name;
}
}
vo类实例:
public class CrmBankTransferAmount extends Model<CrmBankTransferAmount> {
@ApiModelProperty("主键")
@TableId(value = "pk_id", type = IdType.AUTO)
private Integer pkId;
@ApiModelProperty("转账人")
private String name;
@ApiModelProperty("转账银行卡号")
private String bankCardNumber;
@ApiModelProperty("转账金额")
private Integer amount;
@ApiModelProperty("余额")
private Integer balance;
@ApiModelProperty("转账时间")
private Date paymentTime;
@ApiModelProperty("转账人")
private Time time;
@ApiModelProperty("收款账号")
private String accountNumber;
@ApiModelProperty("客户摘要")
private String customerSummary;
@ApiModelProperty("删除状态 0-未删除 1-删除")(该字段有问题)
private AliPayOrderStatusEnum deleteState;
}
原因分析:
提示:数据库中字段类型设置成了tinyint,但是枚举类实现IEnum时泛型的Integer,导致equals方法无法对比
例如:
解决方案:
数据库中该字段类型设置为int类型