I have following java class in a Springboot application
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
}
I would like to serialize/deserialize json given below to the enum
{ "userName" : "usrer", "role" : "role", "password" : "psw", "enabled" : true }
I am not successful by using either @JsonProperty(which accepts String only) or @JsonValue (given in the code as commented line with error message) or @Jsconcreator (again code and error message given in the commented section. Can somebody give me a pointer? Jackson version is 2.13.0. Thank you.
All you need at this point is a way to tell Jackson to convert from and to your enum. You can combine @JsonValue
and @JsonCreator
inside your Status
enum:
@JsonValue
public boolean value() {
return this.enabled;
}
@JsonCreator
public static Status of(boolean b) {
return b ? ENABLED : DISABLED;
}
@JsonValue
(on the instance method) tells Jackson what value to use when serializing. The @JsonCreator
annotation on that static method tells Jackson that the boolean taken from JSON can be used to resolve the corresponding enum value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With