【发布时间】:2020-11-15 13:05:21
【问题描述】:
我正在构建 Spring Boot webflux REST API 功能,该功能需要处理包含少量 Java 类型(例如,让我们考虑 String、Integer、Double)信息的数据作为 JSON 请求/响应的一部分。表示 Java 类型的属性也必须在 mongodb 中是可持久的(一旦 JSON 可以使用此类属性,这应该不是问题)。我有以下模型类和类型枚举,REST API 使用它来序列化/反序列化 JSON 消息。
@Getter
@ToString
@EqualsAndHashCode(exclude = "id")
@Document(collection = "core_scheme")
@JsonDeserialize(builder = SchemeModel.Builder.class)
@Builder(builderClassName = "Builder", toBuilder = true, setterPrefix = "with")
public class SchemeModel {
@Id
private final String id;
@Field(name = "userId") private final String userId;
@Field(name = "date") private final String creationDate;
@Field(name = "properties") private final Map<String, SchemeTypes> properties;
}
public enum SchemeTypes {
INTEGER, STRING, DOUBLE
}
序列化和反序列化工作得很好。现在的问题是,当我想解析存储在 Map<String, SchemeTypes> properties 映射中的真实 Java 类型时,我需要进行类似于此的映射(只是抽象而不是真实代码):
SchemeTypes.INTEGER => Java Integer class
SchemeTypes.STRING => Java String class
SchemeTypes.DOUBLE => Java Double class
有没有更简单的方法来表示存储在模型类中并在序列化/反序列化 JSON 文件中使用的 Java 类型,所以我可以直接使用它来推断 Java 类型,而无需额外验证它是有效的 Java 类型。例如,如果在提到的枚举中枚举的类型与真正的 Java 类型具有完全相同的命名,我可以在没有任何映射的情况下执行以下操作:
public void deduceClass(SchemeTypes type) {
Class myClass = Class.forName(type.toString());
}
请注意,我正在寻找一种开箱即用的解决方案(我不必验证用户提供的类型)。如果这样的解决方案更难像提到的映射那样实现,我会坚持使用映射。
【问题讨论】:
标签: java json spring-boot rest