使用@RequestBody将JSON转换为Enum类型
我有一个主枚举类,它本质上是一种对象类型的类定义。例如,它看起来像下面的示例:
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类值不是一个
什么我在这里做错了吗?我是否需要枚举类中的其他方法来正确转换传入的枚举值?它是否应该使用枚举中的另一个值(我没有成功尝试过它们)?感谢您的任何帮助,似乎应该可以自动转换输入值,我只是想不通!
回答:
错误消息解释了出了什么问题: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
。
以上是 使用@RequestBody将JSON转换为Enum类型 的全部内容, 来源链接: utcz.com/qa/426193.html