详解Spring MVC自动为对象注入枚举类型

发布时间 - 2026-01-11 00:47:51    点击率:

如果一个对象里面有枚举类型的话,则spring MVC是不能够直接进行注入的,因为它只实现了一些基本的数据类型的自动转换注入,但是其也提供了可扩展的接口,可以根据自己的需要来进行扩展。下面是一个示例:

首先:这是一个枚举类:

/** 
 * 新闻类别 
 * @author: ShangJianguo 
 * 2014-6-11 上午10:51:07 
 */ 
public enum ENews { 
 
  company("0"), // 企业新闻 
  industry("1");// 行业新闻 
 
  private final String value; 
   
  private ENews(String v) { 
    this.value = v; 
  } 
   
  public String toString() { 
    return this.value; 
  } 
 
  public static ENews get(int v) { 
    String str = String.valueOf(v); 
    return get(str); 
  } 
 
  public static ENews get(String str) { 
    for (ENews e : values()) { 
      if(e.toString().equals(str)) { 
        return e; 
      } 
    } 
    return null; 
  } 
} 

下面是个实体类:

public class News { 
   
  private ENews type; 
  private String adminuid; 
  private String title; 
  private String summary; 
  private String author; 
  private String origin; 
  private String originurl; 
  private String content; 
 
    // 省略setter和getter方法 
} 

这里是controller层:

@RequestMapping(value="/news/update", method=RequestMethod.POST) 
@ResponseBody 
public boolean edit_update(Map<String, Object> model,HttpServletRequest request,News news){ 
  String adminid = getAdminid(); 
  news.init(adminSO.getAdminByAdminid(adminid).getUid()); 
  if (news != null) { 
    if (newsSO.update(news)) { 
      return true; 
    } 
  } 
  return false; 
} 

但是,到了这里程序还不能够正常的运行,真正的要点在下面,写一个枚举的转换类(Converter):

public class StringToENewsConverter implements Converter<String, ENews>{ 
 
  /* (non-Javadoc) 
   * @see com.fasterxml.jackson.databind.util.Converter#convert(java.lang.Object) 
   * @author: ShangJianguo 
   * 2014-6-12 下午4:56:30 
   */ 
  @Override 
  public ENews convert(String source) { 
    String value = source.trim(); 
    if ("".equals(value)) { 
      return null; 
    } 
    return ENews.get(Integer.parseInt(source)); 
 
  } 
} 

然后在spring mvc的配置文件中进行配置:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
  <property name="converters"> 
    <set> 
      <bean class="com.ngenius.core.converters.StringToENewsConverter" /> 
       
    </set> 
  </property> 
</bean> 

这样spring在进行对对象的字段进行注入的时候就可以运行了,直接把前端接收来的内容转换为ENews类型,进行封装。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # mvc  # 注入枚举  # 枚举参数  # springmvc  # 枚举  # Spring成员对象注入的三种方式详解  # 解决netty中spring对象注入失败的问题  # springboot2.x解决运行顺序及Bean对象注入顺序的问题  # spring中对象注入的三种实现方式  # 自己的  # 是一个  # 是个  # 还不  # 这是一个  # 可以根据  # 转换为  # 不能够  # 配置文件  # 它只  # 大家多多  # 就可以  # 实现了  # 上午  # 下午  # 实体类  # null  # News  # valueOf  # str 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  jquery插件bootstrapValidator表单验证详解  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Android自定义控件实现温度旋转按钮效果  详解Huffman编码算法之Java实现  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  如何注册花生壳免费域名并搭建个人网站?  如何快速搭建自助建站会员专属系统?  Laravel如何使用.env文件管理环境变量?(最佳实践)  公司门户网站制作流程,华为官网怎么做?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何快速上传建站程序避免常见错误?  如何在建站之星绑定自定义域名?  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  HTML 中动态设置元素 name 属性的正确语法详解  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  如何快速搭建FTP站点实现文件共享?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  JS去除重复并统计数量的实现方法  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Bootstrap整体框架之CSS12栅格系统  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  个人摄影网站制作流程,摄影爱好者都去什么网站?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何在云主机上快速搭建多站点网站?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在Windows服务器上快速搭建网站?  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel如何处理表单验证?(Requests代码示例)  如何在万网开始建站?分步指南解析  利用python获取某年中每个月的第一天和最后一天  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何在宝塔面板中创建新站点?  JS经典正则表达式笔试题汇总  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】