原文地址:http://1358440610-qq-com.iteye.com/blog/2079048

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

首先:这是一个枚举类:

  1. /**
  2. * 新闻类别
  3. * @author: ShangJianguo
  4. * 2014-6-11 上午10:51:07
  5. */
  6. public enum ENews {
  7. company("0"), // 企业新闻
  8. industry("1");// 行业新闻
  9. private final String value;
  10. private ENews(String v) {
  11. this.value = v;
  12. }
  13. public String toString() {
  14. return this.value;
  15. }
  16. public static ENews get(int v) {
  17. String str = String.valueOf(v);
  18. return get(str);
  19. }
  20. public static ENews get(String str) {
  21. for (ENews e : values()) {
  22. if(e.toString().equals(str)) {
  23. return e;
  24. }
  25. }
  26. return null;
  27. }
  28. }

下面是个实体类:

  1. public class News {
  2. private ENews type;
  3. private String adminuid;
  4. private String title;
  5. private String summary;
  6. private String author;
  7. private String origin;
  8. private String originurl;
  9. private String content;
  10. // 省略setter和getter方法
  11. }

这里是controller层:

  1. @RequestMapping(value="/news/update", method=RequestMethod.POST)
  2. @ResponseBody
  3. public boolean edit_update(Map<String, Object> model,HttpServletRequest request,News news){
  4. String adminid = getAdminid();
  5. news.init(adminSO.getAdminByAdminid(adminid).getUid());
  6. if (news != null) {
  7. if (newsSO.update(news)) {
  8. return true;
  9. }
  10. }
  11. return false;
  12. }

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

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

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

  1. <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  2. <property name="converters">
  3. <set>
  4. <bean class="com.ngenius.core.converters.StringToENewsConverter" />
  5. </set>
  6. </property>
  7. </bean>

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

Spring MVC 自动为对象注入枚举类型的更多相关文章

  1. Spring MVC自动为对象注入枚举数据

    一.实现转换工厂,定义转换实现,如下:     package com.mafwo; import org.springframework.core.convert.converter.Convert ...

  2. Spring MVC通过Pageable对象和PageableDefault注解获取分页信息(MongoDB通过Pageable来操作分页)

    说明:Pageable同时也能用于操作MongoDB的分页. PageableSpring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息( ...

  3. Spring:所有依赖项注入的类型

    一.前言 Spring文档严格只定义了两种类型的注入:构造函数注入和setter注入.但是,还有更多的方式来注入依赖项,例如字段注入,查找方法注入.下面主要是讲使用Spring框架时可能发生的类型. ...

  4. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n ...

  5. hibernate+spring mvc, 解决hibernate 对象懒加载 json序列化问题

    引用地址 在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") ...

  6. hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败

    在使用spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") @Resp ...

  7. Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)

    1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...

  8. Spring MVC 属性文件读取注入到静态字段

    目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用   在项目中,有些参数需要配置到属性文件xxx.pr ...

  9. spring mvc中,直接注入的HttpServletRequst是否安全呢?

    看似很简单的一个问题,借此追踪下spring的源码处理 在写springMVC的Control中有很多这种代码, 如需要获取request对象去做某些事情 如: @Controller @Reques ...

随机推荐

  1. 初始化 CSS 样式

    为什么要初始化 CSS 样式 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异. 当然,初始化样式会对 SEO 有一定的影响,但鱼 ...

  2. hibernate多对多关系

    package com.manytomany; import java.util.HashSet; import java.util.Set; public class Student { priva ...

  3. 《Netty in action》 读书笔记

    声明:这篇文章是记录读书过程中的知识点,并加以归纳总结,成文.文中图片.代码出自<Netty in action>. 1. 为什么用Netty? 每个框架的流行,都一定有它出众的地方.Ne ...

  4. ClassNotFoundException与NoClassDefFoundError异常

    方法 loadClass()抛出的是 java.lang.ClassNotFoundException异常(一般是jar冲突或者没有引入jar):方法 defineClass()抛出的是 java.l ...

  5. Python3 练习2 列表和字典练习

    找出列表list中大于100的值,给字典dic的k1键,小于等于100的值,给字典dic的k2键 ''' 提示:创建字典的两种方式 ex: ''' v1 = [2,3,4,5,] v2 = 88 di ...

  6. python永久添加环境变量

    import sys sys.path 系统环境是一个list,可以将自己需要的库添加进入,例如mysql库,hive库等等.有三种方式添加,均验证通过:     1 临时添加,在一个shell窗口中 ...

  7. 数据恢复工具--extundelete的安装与使用

    1.extundelete的恢复原理 extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息,来获得当前文件系统下所有文件的信息,包括存在的和已 ...

  8. 查看docker容器的内存占用

    使用docker stats命令可以查看容器的内存,但是有时候docker stats命令获得的数据可能准确,可以参考下面这种方式 先通过docker ps -a 找到容器的container id ...

  9. arcgis10.2 打开CAD文件注记乱码

    1.使用ARCGIS10.2打开CAD文件,图面显示的注记内容为乱码,属性表中的注记内容正常2.同样的CAD文件在ARCGIS9.3中打开正常出现此情况影响历史数据使用,请求ESRI技术支持注:系统添 ...

  10. μC/Probe尝鲜

    μC/Probe 1.添加文件 2.配置probe_com_cfg.h 2.1.选择接口 #define PROBE_COM_CFG_RS232_EN DEF_ENABLED /* Configure ...