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 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{

	/* (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的配置文件中进行配置:

	
		
			
				
				
			
		
	

 

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

 

 私人广告模块。。。下面依然是我建的一个公众帐号,可以关注一下哦,谢谢

 

你可能感兴趣的:(spring)