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

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

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

 

首先:这是一个枚举类:

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

 

下面是个实体类:

 

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

 

这里是controller层:

Java代码  收藏代码
  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):

 

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

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

Java代码  收藏代码
  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.               
  6.         </set>  
  7.     </property>  
  8. </bean>  

 

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

 

posted @ 2015-01-02 17:06  snow__wolf  阅读(2854)  评论(0编辑  收藏  举报