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

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

首先:这是一个枚举类:

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

下面是个实体类:

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

这里是controller层:

  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):

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

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

  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. </set>
  6. </property>
  7. </bean>

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

Spring MVC 自动为对象注入枚举类型的更多相关文章

  1. Spring MVC自动为对象注入枚举数据

    一.实现转换工厂,定义转换实现,如下:     package com.mafwo; import org.springframework.core.convert.converter.Convert ...

  2. Spring MVC通过Pageable对象和PageableDefault注解获取分页信息(MongoDB通过Pageable来操作分页)

    说明:Pageable同时也能用于操作MongoDB的分页. PageableSpring Data库中定义的一个接口,该接口是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息( ...

  3. Spring:所有依赖项注入的类型

    一.前言 Spring文档严格只定义了两种类型的注入:构造函数注入和setter注入.但是,还有更多的方式来注入依赖项,例如字段注入,查找方法注入.下面主要是讲使用Spring框架时可能发生的类型. ...

  4. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n ...

  5. hibernate+spring mvc, 解决hibernate 对象懒加载 json序列化问题

    引用地址 在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") ...

  6. hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败

    在使用spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例: @RequestMapping("login") @Resp ...

  7. Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)

    1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...

  8. Spring MVC 属性文件读取注入到静态字段

    目录(?)[-] servlet-contextxml configproperties 示例属性 ConfigInfo 对应的配置bean 使用   在项目中,有些参数需要配置到属性文件xxx.pr ...

  9. spring mvc中,直接注入的HttpServletRequst是否安全呢?

    看似很简单的一个问题,借此追踪下spring的源码处理 在写springMVC的Control中有很多这种代码, 如需要获取request对象去做某些事情 如: @Controller @Reques ...

随机推荐

  1. 解决jquery库和base库的冲突

    jquery库引用在base库之前,$的所有权就是base库的:而jquery库引用在base库之前后的话,$的所有权就是jquery库的.解决这种库之间的冲突可用以下方法解决: 情况一,jquery ...

  2. 2017《JAVA技术》预备作业2-计科1502-19-何俏依

    Git学习笔记 1.安装git并验证安装成功 2.注册码云账号并配置git 3.创建ssh key并在码云上添加公钥,验证公钥添加成功 添加公钥的过程中,出现了一些问题,未找到文件,经过老师的指点,仔 ...

  3. 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener

    =================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...

  4. GitHub命令更新

    github命令 1.git clone url 从远程master拉代码 2.进入目录 3.拉下来之后,git branch,查看本地分支是否为master,不是的话git checkout mas ...

  5. day 41 标准文档流 浮动

    一.标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 标准文档 ...

  6. bootstrap modal 点击头部移动

    $(".modal").each(function(){ $(this).draggable({ handle: ".modal-header" // 只能点击 ...

  7. [转]Java泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...

  8. googletest--Death Test和Exception Test

    Death Test验证某个状态会使进程以某个错误码和错误消息离开 #include <gtest\gtest.h> #include "MyStack.h" // D ...

  9. VS2017调试出现异常浏览器直接关闭的解决办法

    最近升级完VS2017后,出现了各种不适应. 1.F5调试时总是会打开新的浏览器,过去都是在现有窗口右侧打开新的新的浏览器标签页. 这一点就让很不爽,勉强接受吧,继续调试代码但是还有第二种情况. 2. ...

  10. C语言 链表(VS2012版)

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> ...