原文地址: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. day04元组

    元组 1.元祖书写规范 users=[11,22,33,"老男孩"]#列表(可变) users=(11,22,33,"老纳海")#元祖(不可变) 1.公共方法( ...

  2. 本文档教授大家在yii2.0里实现文件上传 首先我们来实现单文件上传

    第一步  首先建立一个关于上传的model层  如果你有已经建好的可以使用表单小部件的model层 也可以直接用这个.在这里我们新建一个新的model层 在model层新建文件  Upload.php ...

  3. Pytho, struct处理二进制(pack和unpack)

    [转]Python使用struct处理二进制(pack和unpack用法) Leave a reply 转载自:http://www.cnblogs.com/gala/archive/2011/09/ ...

  4. 安装包安装npm

    在阿里云机器上centos7安装npm可以直接yum安装,然后基于镜像的时候安装不了,直接使用安装包安装,记录一下: 官网下载地址:https://nodejs.org/en/download/ #! ...

  5. 关于set_input_delay的用法分析

    关于set_input_delay的用法分析 数据分为了系统同步和源同步: 对于下降沿采集数据的情况,当下降沿时钟延迟dv_afe到达无效数据最左端时,图中1位置,为最小延时,即采集不到有效数据的临界 ...

  6. forward reference前向引用,gloal values and local values全局变量和局部变量,recursive function递归函数

    1.全局变量与局部变量练习 1 # -*- coding: UTF-8 -*- 2 def bar(): 3 print('from bar') 4 def foo(): 5 print('from ...

  7. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

    1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...

  8. 纯CSS制作图形效果

    下面所有的例子都是在demo.html的基础上添加相关样式实现的. <!DOCTYPE html> <html> <head> <meta charset=& ...

  9. git push 和 pull 时 免密执行的方法

    问题:在使用git代码仓库时,使用git clone 获取代码时,如果使用的是https协议,则在每次push时需要输入账号密码.相关文档:文档一,文档二 验证了文档一种的方法二可用,记录一下创建文件 ...

  10. SPI、I2C、UART、I2S、GPIO、SDIO、CAN 简介

    转自http://sanwen.net/a/fmxnjoo.html SPI.I2C.UART.I2S.GPIO.SDIO.CAN,看这篇就够了 总线 总线,总要陷进里面.这世界上的信号都一样,但是总 ...