无法使用 Jackson 将布尔值转换为枚举

Failed to convert boolean to enum using Jackson

我在 Springboot 应用程序中有以下 java class

public enum Status {
    
    DISABLED(false),
    
    ENABLED(true);
    
    private final boolean enabled;
    
    Status(boolean value){
        this.enabled = value;
    }

    public boolean value() {
        return this.enabled;
    }   
    
    /*
    @JsonValue public boolean jsonValue() { return enabled; }
    
    Error: Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `com.q.demo.model.Status` from Boolean value (token `JsonToken.VALUE_TRUE`); 
    
    */
    
    /*
    public static Status forValue(@JsonProperty("enabled") Boolean status) {
        if (status == null) {
           return null;
        }
        if (Status.ENABLED.value() == status.booleanValue()) {
              return Status.ENABLED;
        } else {
             return Status.DISABLED;
        }
   }
   
   Error: Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Input mismatch reading Enum `com.q.demo.model.Status`: properties-based `@JsonCreator` ([method com.q.demo.model.Status#forValue(java.lang.Boolean)]) expects JSON Object (JsonToken.START_OBJECT), got JsonToken.VALUE_TRUE;
   */

}

public class User {
    
    private Long userId;
    
    private String userName;
    
    private String role;
    
    private String password;
    
    private Status enabled;

    //Getters and setters

}

我想serialize/deserializejson下面给枚举

{ “用户名”:“用户名”, “角色”:“角色”, “密码”:“ps”, “启用”:真 }

我使用@JsonProperty(仅接受字符串)或@JsonValue(在代码中作为带有错误消息的注释行给出)或@Jsconcreator(再次在注释部分中给出代码和错误消息)均未成功。有人可以指点一下吗?Jackson 版本是 2.13.0。谢谢。

此时您所需要的只是告诉 Jackson 从您的枚举转换到您的枚举的方法。您可以在 Status 枚举中组合 @JsonValue@JsonCreator

@JsonValue
public boolean value() {
    return this.enabled;
}

@JsonCreator
public static Status of(boolean b) {
    return b ? ENABLED : DISABLED;
}

@JsonValue(在实例方法上)告诉 Jackson 在序列化时使用什么值。该静态方法上的 @JsonCreator 注释告诉 Jackson 从 JSON 中获取的布尔值可用于解析相应的枚举值。