使用@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需要的关键是REDGREENBLUE

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

以上是 使用@RequestBody将JSON转换为Enum类型 的全部内容, 来源链接: utcz.com/qa/426193.html

回到顶部