如何做到这一点,不在 Enum.valuesOf() 中抛出异常?
How to make so, that exceptions don't thrown in Enum.valuesOf()?
我有 class BookSpecBuider
从 dto 创建 JPA 规范。
BookSpecBuider class:
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
流派
是枚举-class,所以我在 BookSearchDto 类型中遇到问题,它的映射有问题。
我在 if-block 中更改它:
predicates.add(root.get("genre").in(Genre.valueOf(bookSearchDto.getGenre())));
但现在我遇到异常问题,如果我得到 String of Genre,而我的枚举没有。
避免此问题的最佳方法是什么?
我建议创建另一个名为 Unknown
(或任何名称)的枚举条目,并在您的 Genre 枚举中创建一个新的静态方法调用 .of()
(或您喜欢的任何名称),
enum Genre {
public static Genre of(String genre) {
for(Genre g : values()) {
if (g.name().equalsIgnoreCase(genre)) {
return g;
}
}
return Unknown;
}
}
这样就避免了不必要的异常。
我有 class BookSpecBuider
从 dto 创建 JPA 规范。
BookSpecBuider class:
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
流派 是枚举-class,所以我在 BookSearchDto 类型中遇到问题,它的映射有问题。
我在 if-block 中更改它:
predicates.add(root.get("genre").in(Genre.valueOf(bookSearchDto.getGenre())));
但现在我遇到异常问题,如果我得到 String of Genre,而我的枚举没有。 避免此问题的最佳方法是什么?
我建议创建另一个名为 Unknown
(或任何名称)的枚举条目,并在您的 Genre 枚举中创建一个新的静态方法调用 .of()
(或您喜欢的任何名称),
enum Genre {
public static Genre of(String genre) {
for(Genre g : values()) {
if (g.name().equalsIgnoreCase(genre)) {
return g;
}
}
return Unknown;
}
}
这样就避免了不必要的异常。