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類型,進行封裝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM