MongoDb - Sping Boot -枚举类型

guicsvcw  于 2023-10-16  发布在  Go
关注(0)|答案(2)|浏览(112)

我有一个使用Sping Boot 和MongoDB的项目。我有一个枚举类,返回。但是,据我所知,枚举类型保存为String到mongdb中。但是,我想保存为一个人。我该如何处理这个问题?
下面是我的Employee类。

@Data
@Document
public class Employee {

    @MongoId(FieldType.OBJECT_ID)
    private String id;
    private String name;
    private String surname;
    private String department;
    private Address address;
    private Company company;
    private Status status;

}

下面是我的枚举类代码。

public enum Status {

    JUNIOR(0),
    MID(1),
    SENIOR(2);

    private final int value;

    Status(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

}
bq3bfh9z

bq3bfh9z1#

  • 要使用Sping Boot 在MongoDB中将枚举保存为整数,您可以

使用自定义转换器
若要为枚举创建自定义转换器,需要创建一个实现Converter接口并将枚举类作为泛型类型参数的类。下面的代码显示Status枚举的自定义转换器的示例:

public class StatusConverter implements Converter<Status, Integer> {

@Override
public Integer convert(Status source) {
    return source.getValue();
}

@Override
public Status unwrap(Integer source) {
    return Arrays.stream(Status.values())
            .filter(status -> status.getValue() == source)
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException("Invalid status value: " + source));
}
}

创建自定义转换器后,需要将其注册到Spring Data MongoDB。您可以通过将以下配置添加到应用程序的spring.data.MongoDB属性来实现:
spring.data.mongodb.converters.enabled=true spring.data.mongodb.converters.custom-converters=com.example.StatusConverter

67up9zun

67up9zun2#

我不太清楚,不过你可以试试这个

@Enumerated(EnumType.ORDINAL)
    private Status status;

相关问题