首页 > 解决方案 > 如何做到这一点,不会在 Enum.valuesOf() 中引发异常?

问题描述

我有从 dtoBookSpecBuider创建JPA 规范的类。

BookSpecBuider类:

public class BookSpecBuilder {
    public Specification<Book> getSpec(BookSearchDto bookSearchDto) {
        return (root, query, builder) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (bookSearchDto.getGenre() != null) {
                predicates.add(root.get("genre").in(bookSearchDto.getGenre()));
            }
// another conditions

流派 是枚举类,所以我在BookSearchDto中遇到了问题,流派是字符串,并且映射有问题。

我在我的if-block中更改它:

predicates.add(root.get("genre").in(Genre.valueOf(bookSearchDto.getGenre())));

但是现在我遇到了异常问题,如果我得到类型字符串,我的枚举没有。避免此问题的最佳方法是什么?

标签: javajpaenumsspecifications

解决方案


我建议创建另一个名为Unknown(或任何名称)的枚举条目,并在您的 Genre 枚举中创建一个新的静态方法调用.of()(或您喜欢的任何名称),

enum Genre {    
    public static Genre of(String genre) {
        for(Genre g : values()) {
            if (g.name().equalsIgnoreCase(genre)) {
                return g;
            }
        }
        return Unknown;
    }
}

那么这将避免不必要的异常。


推荐阅读