使用@RequestBody将JSON转换为Enum类型

问题描述

错误消息解释了出了什么问题:Red内部没有定义ColorDefinition。情况需要匹配;枚举值区分大小写。在你的JSON需要的关键是REDGREENBLUE

在内部,Spring用于valueOf获取String的枚举表示形式。反序列化期间,ColorDefinition.valueOf("Red")将引发,IllegalArgumentException因为Redin中没有定义ColorDefinition。Spring会拦截此异常,这就是为什么您看到错误消息的原因。但是,ColorDefinition.valueOf("RED")将返回,ColorDefinition.RED因为REDin中有一个定义ColorDefinition

解决方法

我有一个主枚举类,它本质上是一种对象类型的类定义。例如,它看起来像下面的示例:

public enum ColorDefinition
{
     private String abbrev;
     private String color;
     private Class colorClass;
     RED("RD","Red",Red.class),GREEN("GN","Green",Green.class),BLUE("BL","Blue",Blue.class)....
}

我正在尝试建立一个Javascript模型的发布请求,该请求在主体中发送一个映射,例如

到使用

@RequestMapping(value = "v1/color/EnableColors",method = RequestMethod.POST)
@ResponseBody
public ResponseObject enableColors(@RequestBody Map<ColorDefinition,Integer> colorMapping)

而我得到以下错误信息:
不能建立从字符串“红”型ColorDefinition的地图键:不是一个有效的表示:不能建立从字符串“红”型ColorDefinition的地图键:对于Enum类值不是一个

什么我在这里做错了吗?我是否需要枚举类中的其他方法来正确转换传入的枚举值?它是否应该使用枚举中的另一个值(我没有成功尝试过它们)?感谢您的任何帮助,似乎应该可以自动转换输入值,我只是想不通!

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”