天天看點

Spring MVC 自動為對象注入枚舉類型

如果一個對象裡面有枚舉類型的話,則Spring MVC是不能夠直接進行注入的,因為它隻實作了一些基本的資料類型的自動轉換注入,但是其也提供了可擴充的接口,可以根據自己的需要來進行擴充。下面是一個示例:

首先:這是一個枚舉類:

/**
 * 新聞類别
 * @author: ShangJianguo
 * 2014-6-11 上午10:51:07
 */
public enum ENews {

  company("0"), // 企業新聞
  industry("1");// 行業新聞

  private final String value;
  
  private ENews(String v) {
    this.value = v;
  }
  
  public String toString() {
    return this.value;
  }

  public static ENews get(int v) {
    String str = String.valueOf(v);
    return get(str);
  }

  public static ENews get(String str) {
    for (ENews e : values()) {
      if(e.toString().equals(str)) {
        return e;
      }
    }
    return null;
  }
}
           

下面是個實體類:

public class News {
  
  private ENews type;
  private String adminuid;
  private String title;
  private String summary;
  private String author;
  private String origin;
  private String originurl;
  private String content;

        // 省略setter和getter方法
}
           

這裡是controller層:

@RequestMapping(value="/news/update", method=RequestMethod.POST)
  @ResponseBody
  public boolean edit_update(Map<String, Object> model,HttpServletRequest request,News news){
    String adminid = getAdminid();
    news.init(adminSO.getAdminByAdminid(adminid).getUid());
    if (news != null) {
      if (newsSO.update(news)) {
        return true;
      }
    }
    return false;
  }
           

但是,到了這裡程式還不能夠正常的運作,真正的要點在下面,寫一個枚舉的轉換類(Converter):

public class StringToENewsConverter implements Converter<String, ENews>{

  /* (non-Javadoc)
   * @see com.fasterxml.jackson.databind.util.Converter#convert(java.lang.Object)
   * @author: ShangJianguo
   * 2014-6-12 下午4:56:30
   */
  @Override
  public ENews convert(String source) {
    String value = source.trim();
    if ("".equals(value)) {
      return null;
    }
    return ENews.get(Integer.parseInt(source));

  }
}
           

 然後在spring mvc的配置檔案中進行配置:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
      <set>
        <bean class="com.ngenius.core.converters.StringToENewsConverter" />
        
      </set>
    </property>
  </bean>      

這樣spring在進行對對象的字段進行注入的時候就可以運作了,直接把前端接收來的内容轉換為ENews類型,進行封裝。

繼續閱讀