原文地址: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. java.io.EOFException ValueOperations.increment()操作后,获取值时有的bug

    ---恢复内容开始--- 今天使用spring-data-redis包操作redis,就是简单的使用redis的计数功能,在redis中的操作命令如:incr key;get key; 这两步操作使用 ...

  2. C++11如何减少内存拷贝次数

    C++11中出现了很多迷人的特性.例如智能指针实现高效的内存管理,std::bind和std::function函数封装器,以及lambda实现的函数对象语法糖,都是使我着迷的地方. 而C++11最大 ...

  3. hsdfz -- 6.16 -- day1

    恩这回不写游记了 按照老师要求记录今天的心里路程:这题似乎可做期望得分150->日部分分似乎不是很显然->a题似乎是结论题,大力猜一波结论->过不了样例,先看b题->b题动态树 ...

  4. PythonStudy——python中如何使输出不换行

    1.在python 3.x版本中,使用print(,end="") 可使输出不换行,  例如:

  5. day 102 GIT 的使用方法.

    https://www.cnblogs.com/wupeiqi/articles/7295372.html 文件名为红色表示 此文件在工作区被修改的状态 ,需要通过git add .进行提交,提交到版 ...

  6. 对Array.prototype.slice.call()方法的理解

    在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢? 1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规 ...

  7. UEFI和GPT下硬盘克隆后的BCD引导修复

    UEFI和GPT下硬盘克隆后的BCD引导修复-Storm_Center http://www.stormcn.cn/post/1901.html 当硬盘引导换成GPT,系统启动也变成UEFI后,如果直 ...

  8. Web jsp开发学习——网上直播聊天室的简单开发

    整个界面为chat.jsp: 如果用户没有登录,就不能进行聊天. 为将发言的句子传到页面上,要设置一个<iframe></iframe>虚拟框架,将allmessage.jsp ...

  9. 解决mysqli的中文乱码问题

    有时候我们向服务器传汉字,出现内容为空,或???的问题,是因为mysqli对utf8的解码属于 Unicode码,会解析为 Unicode 码:所以我们要对内设置成gbk码, 尽管gbk码,很古来,但 ...

  10. matplotlib绘图总结《转》

    本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数. from p ...