如何从REST API的JSON请求反序列化枚举字段的替代值?

时间:2018-07-24 22:24:33

标签: java spring jackson2

REST API的请求模型具有一个枚举字段:

public enum CommentContext {  
  STUDENT_FEEDBACK,
  STUDENT_QUESTION;
}

现在,我想从枚举值中删除STUDENT_前缀,但又不破坏API的现有调用方。

我试图像这样使用@JsonAlias:

public enum CommentContext {
   @JsonAlias ("{FEEDBACK, STUDENT_FEEDBACK}")
   FEEDBACK,
   @JsonAlias ("{QUESTION, STUDENT_QUESTION}")
   COMMENT;
}

但是,当STUDENT_FEEDBACK作为请求JSON中该枚举字段的值传递时,API失败,并显示400 Bad Request。

是否可以针对此枚举字段的替代值(例如FEEDBACK或STUDENT_FEEDBACK)从JSON反序列化此CommentContext对象?

1 个答案:

答案 0 :(得分:0)

您可以使用@JsonCreator进行操作。在这里,我为您的问题提供了解决方案:

public enum CommentContext {
STUDENT_FEEDBACK,
STUDENT_QUESTION;

@JsonCreator
public static CommentContext setValue(String key){
    Optional<CommentContext> commentContext = Arrays.stream(CommentContext.values())
            .parallel()
            .filter(ct -> ct.toString().equals(key) || ct.toString().substring(8).equals(key))
            .findAny();
    return commentContext.orElse(null);
}
}

您还可以看到此link