本文介绍: *** 自定义枚举转换器(直接抄StringToEnumConverterFactory)*/@Override/*** StringToEnumConverterFactory默认调用Enum.valueOf(),也就是根据Enum.name匹配* 我们改成根据Enum.ordinal匹配* @return*/@Override@Override// 把我们自定义枚举转换器添加到Spring容器,Spring容器会把它加入到SpringMVC的拦截链路中。

作者简介大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

上一篇我们通过编写MyBatis转换器最终完成枚举在DAO层和数据库之间的转换

现在让我们把目光往前移,思考一下如何编写SpringMVC的转换器完成前端与Controller层的枚举转换

  • GET
  • POST

  • 请求(入)
  • 响应(出)

  • 了解GET/POST表单请求时,SpringMVC默认的转换机制
  • 改写这个机制

  • 前端发起请求,传递userType=”STUDENT”
  • 从Tomcat的Servlet到SpringMVC的Controller,中间要经过很多类和方法
  • SpringMVC会解析入参对象的每一个字段,选取合适的ConverterFactory为其进行转换
  • 默认使用StringToEnumConverterFactory为枚举类型进行转换,即调用Enum.valueOf(name)

  • getType()/getDesc不够通用,项目中其他枚举可能叫getValue()/getDescription()
  • 最重要的是,class MyEnumConverterFactory implements ConverterFactory<String, Enum>使用Enum限定,内部元素只能使用父类Enum的方法,无法直接调用getType()等方法

  • GET/POST表单,默认使用StringToEnumConverterFactory,只支持Enum.name
  • POST JSON默认支持Enum.name、Enum.ordinal

  • POST JSON:@JsonCreator
  • GET/POST:@MyJsonCreator
  • 全局设置toString()作为序列化的值

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

进群,大家一起学习,一起进步,一起对抗联网寒冬

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注