尝试反序列化json中的枚举时,索引值超出合法索引范围

use*_*618 9 enums json deserialization

我正在尝试反序列化一个 json 字符串,该字符串将枚举作为其值之一。

枚举结构如下

ENUM STATUS
{
    ACTIVE(0), INACTIVE(1), EXPIRED(3)// Note here that 2 is not used due to some reasons
}

int status = 0;  
public static Status getNameByValue(final int value) {
        for (final Status s: Status.values()) {
            if (s.status== value) {
                return s;
            }
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试读取一个 json 字符串时,该字符串将其作为其值之一,如下所示

{"name":"Raj","status": 3}
Run Code Online (Sandbox Code Playgroud)

我有以下例外。

number value (3): index value outside legal index range [0..2]
 at [Source: org.apache.catalina.connector.CoyoteInputStream@9e89a21; line: 1, column: 28] (through reference chain: 
Run Code Online (Sandbox Code Playgroud)

请在这方面帮助我

ToY*_*nos 6

getNameByValue只需用@JsonCreator, 对我的作品进行注释即可

ENUM STATUS
{
    ACTIVE(0), INACTIVE(1), EXPIRED(3) // Note here that 2 is not used due to some reasons
}

int status = 0;  

@JsonCreator
public static Status getNameByValue(final int value) {
        for (final Status s: Status.values()) {
            if (s.status== value) {
                return s;
            }
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)


dub*_*bes 0

默认情况下,大多数框架将根据枚举的序号来序列化/反序列化枚举。

您需要告诉反序列化器如何理解您的枚举,例如,如果您使用 Jackson 来映射到 JSON 或从 JSON 映射,您可以参考以下答案,虽然这个答案是用于序列化的,但您可以遵循相同的方法进行反序列化。