无法使用 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 中获取的布尔值可用于解析相应的枚举值。
我在 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 中获取的布尔值可用于解析相应的枚举值。