问题描述
错误消息解释了出了什么问题:Red
内部没有定义ColorDefinition
。情况需要匹配;枚举值区分大小写。在你的JSON需要的关键是RED
,GREEN
和BLUE
。
在内部,Spring用于valueOf
获取String的枚举表示形式。反序列化期间,ColorDefinition.valueOf("Red")
将引发,IllegalArgumentException
因为Red
in中没有定义ColorDefinition
。Spring会拦截此异常,这就是为什么您看到错误消息的原因。但是,ColorDefinition.valueOf("RED")
将返回,ColorDefinition.RED
因为RED
in中有一个定义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类值不是一个
什么我在这里做错了吗?我是否需要枚举类中的其他方法来正确转换传入的枚举值?它是否应该使用枚举中的另一个值(我没有成功尝试过它们)?感谢您的任何帮助,似乎应该可以自动转换输入值,我只是想不通!