我认为您应该为枚举定义外部解串器
Grade。
我在枚举中添加了其他字段-未知:
enum Grade { A, B, C, UNKNOWN; public static Grade fromString(String value) { for (Grade grade : values()) { if (grade.name().equalsIgnoreCase(value)) { return grade; } } return UNKNOWN; }}class Employee { @JsonDeserialize(using = GradeDeserializer.class) private Grade grade; private String name; public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Employee [grade=" + grade + ", name=" + name + "]"; }}现在,解析器可能看起来像这样:
class GradeDeserializer extends JsonDeserializer<Grade> { @Override public Grade deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException { return Grade.fromString(parser.getValueAsString()); }}用法示例:
public class JacksonProgram { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); JsonFactory jsonFactory = new JsonFactory(); JsonParser parser = jsonFactory .createJsonParser("{"name":"John", "grade":"D"}"); Employee employee = objectMapper.readValue(parser, Employee.class); System.out.println(employee); }}输出:
Employee [grade=UNKNOWN, name=John]
如果您不想添加其他字段,则返回
null例如。



