打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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);


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring MVC 学习笔记 十一 data binding
spring mvc 如何传递集合参数(list,数组)
springboot mybatis 使用多数据源
请问spring mvc <param-name>contextConfigLocation</param-name>里的
spring+Hibernate处理Oracle大字段clob
SPRING MVC
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服