mysql的enum类型转换_enum枚举类型在spring mvc中的转换

枚举类型可以增强代码的可读性和健壮性,在项目中有广泛的使用,比如,我们有一个代码数据库类型的枚举:

public enum DatabaseType{

oracle,

mysql,

sqlServer

}

在另一个数据源对象中,引用了这个枚举类型,如:

public class DataSource {

private DatabaseType  databaseType;

}

DataSource对象中的databaseType属性,可以通过hibernate中的@Enumerated注解实现很好的映射,保存到数据库中的值,是枚举类型的下标,从0开始。有些同学使用的是spring mvc,而spring mvc没有提供对枚举类型的自动转换功能,我们要如何处理呢?当然,是要定义自己的属性转换器了,代码如下:

class DatabaseTypeEnumEditor extends PropertyEditorSupport {

@Override

public void setAsText(String text) throws IllegalArgumentException {

int val = Integer.parseInt(text);

boolean found = false;

for (DatabaseType d : DatabaseType.values()) {

if (val == d.ordinal()) {

this.setValue(d);

found = true;

break;

}

}

if (found == false) {

//错误的取值,我们默认为oracle类型,当然你也可以throws exception

this.setValue(DatabaseType.oracle);         }

}

}

}

最后将这个属性转换器注册到spring mvc的这个action上:

@InitBinder

protected void initBinder(HttpServletRequest request,

ServletRequestDataBinder binder) throws Exception {

binder.registerCustomEditor(Date.class, dateEditor);

binder.registerCustomEditor(DatabaseType.class, new DatabaseTypeEnumEditor());

}

至此已经全部完成。

最后说一下jackson在对enum进行转换时,默认情况下得到的是枚举字符串,如果想得到其底层的真实值(即和hibernate持久化的值保持一致),需要打开这个开关:

ObjectMapper om = new ObjectMapper();

om.configure(Feature.WRITE_ENUMS_USING_INDEX, true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值