java—如何使异常不在enum.valuesof()中抛出?

4ktjp1zp  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(350)

我有课 BookSpecBuider 从dto创建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

genre是enum类,所以在我的booksearchdto中,genre是string,并且Map有问题。
我在if块中更改它:

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

但现在我有一个例外的问题,如果我得到类型的字符串,我的枚举没有。避免这个问题的最佳方法是什么?

vlurs2pr

vlurs2pr1#

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

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

这样就可以避免不必要的例外。

相关问题