gpt4 book ai didi

java - 使用@RequestBody 将 JSON 转换为枚举类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:33 26 4
gpt4 key购买 nike

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

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 模型设置一个发布请求,它在正文中发送一个映射,例如
{红色:255,绿色:0,蓝色:0}

到使用

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

我收到以下错误消息:
无法从字符串“红色”构造 ColorDefinition 类型的映射键:不是有效表示:无法从字符串“红色”构造 ColorDefinition 类型的映射键:不是枚举类的值之一

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

最佳答案

错误消息解释了问题所在:Red 没有定义里面ColorDefinition .案例需要匹配;枚举值区分大小写。 JSON 中的键必须是 RED , GREEN , 和 BLUE .

在内部,Spring 使用 valueOf获取字符串的枚举表示。在反序列化过程中,ColorDefinition.valueOf("Red")会抛出 IllegalArgumentException因为没有 Red 的定义在 ColorDefinition .此异常被 Spring 拦截,这就是您看到错误消息的原因。然而,ColorDefinition.valueOf("RED")将返回 ColorDefinition.RED因为有 RED 的定义在 ColorDefinition .

关于java - 使用@RequestBody 将 JSON 转换为枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com