Spring MVC 自动为对象注入枚举类型
原文地址:http://1358440610-qq-com.iteye.com/blog/2079048
如果一个对象里面有枚举类型的话,则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类型,进行封装。
Spring MVC 自动为对象注入枚举类型的更多相关文章
- Spring MVC自动为对象注入枚举数据
一.实现转换工厂,定义转换实现,如下: package com.mafwo; import org.springframework.core.convert.converter.Convert ...
- Spring MVC通过Pageable对象和PageableDefault注解获取分页信息(MongoDB通过Pageable来操作分页)
说明:Pageable同时也能用于操作MongoDB的分页. PageableSpring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息( ...
- Spring:所有依赖项注入的类型
一.前言 Spring文档严格只定义了两种类型的注入:构造函数注入和setter注入.但是,还有更多的方式来注入依赖项,例如字段注入,查找方法注入.下面主要是讲使用Spring框架时可能发生的类型. ...
- JAVA高级特性--自动拆箱-装箱,枚举类型
基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n ...
- hibernate+spring mvc, 解决hibernate 对象懒加载 json序列化问题
引用地址 在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") ...
- hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败
在使用spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") @Resp ...
- Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...
- Spring MVC 属性文件读取注入到静态字段
目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用 在项目中,有些参数需要配置到属性文件xxx.pr ...
- spring mvc中,直接注入的HttpServletRequst是否安全呢?
看似很简单的一个问题,借此追踪下spring的源码处理 在写springMVC的Control中有很多这种代码, 如需要获取request对象去做某些事情 如: @Controller @Reques ...
随机推荐
- webpack初步学习
https://segmentfault.com/a/1190000006178770 该篇文章足够webpack入门的学习了,对webpack有个初步的了解和认识.
- HDU 2062:Subset sequence(思维)
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- day03字符串
字符串 1.方法详细内容 方法 强制转换 ##### 1.大小写转换 Value.upper() / value.lower() new_value=value.upper() print(new_v ...
- 重建二叉树(JAVA)
重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历 ...
- C#编码、解码与ASP.NET编码解码对应函数
JavaScript函数分别为:encodeURIComponent/decodeURIComponent C#对应的函数分别为:Uri.EscapeUriString/Uri.EscapeDataS ...
- string函数的一些实现
/************************************************************************* > File Name: test.cpp ...
- nginx里proxy_pass有无/的区别
nginx在反向代理的时候,proxy_pass需要指定路径,有无"/"的区别,如下: location /lile { 配置一: proxy_pass http://192. ...
- Qt对`vtable的未定义引用
错误描述:Qt在linux系统编译时,遇到一个错误大致如下形式 在 xxxxx函数中 对‘vtable for xxxxx未定义的引用 网上找了很多,各种情况都有,大多数是虚函数未实现导致的, 但也有 ...
- ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像
我们知道进入docker容器可以使用attach.exec等命令来操作和管理,但是如果需要远程登录并管理容器,就需要ssh服务的支持了. 1.基于commit命令创建 docker提供了commit命 ...
- Delphi调用大漠插件示例
Delphi XE2 版本调用大漠插件方法:打开Component->Import Component->默认Import a Type Library,点击Next->找到Dm.d ...