Java 如何使例外情况不';是否在Enum.valuesOf()中抛出了t?

Java 如何使例外情况不';是否在Enum.valuesOf()中抛出了t?,java,jpa,enums,specifications,Java,Jpa,Enums,Specifications,我有一个类BookSpecBuider,它从dto创建JPA规范 BookSpecBuider类别: public class BookSpecBuilder { public Specification<Book> getSpec(BookSearchDto bookSearchDto) { return (root, query, builder) -> { List<Predicate> predicates =

我有一个类
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
但现在我遇到了例外问题,如果我得到了我的枚举没有的类型字符串。
避免此问题的最佳方法是什么?

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

enum流派{
公共静态类型(字符串类型){
对于(类型g:values()){
if(g.name().equalsIgnoreCase(类型)){
返回g;
}
}
返回未知;
}
}

这样可以避免不必要的异常。

嗯。。。通过捕获和处理异常?我认为这不是很好。需要注意的是,
Unknown
突然成为
genre
属性的有效值。需要调整业务逻辑,以期望
类型
具有此额外选项(例如,当创建
书籍
时,可能需要额外的验证,以将
未知
排除为有效值等)@crizzis I在BookSpecBuilder的if块中验证它。我同意你的看法,但我不知道避免所有这些问题的最佳方法。
predicates.add(root.get("genre").in(Genre.valueOf(bookSearchDto.getGenre())));