【问题标题】:How to display List of enum - SpringBoot如何显示枚举列表 - Spring Boot
【发布时间】:2021-03-15 16:43:52
【问题描述】:

我正在尝试按类别显示书籍列表。

Category.java

public enum Category {
    NEW,
    CLASSIC,
    STANDARD;
}

BookDto.java

public class BookDto {

    private Long id;

    private String title;

    private String author;

    private String publisher;

    private Category category;

    private int totalCount;

}

RentController.java

 @GetMapping("/booksCategory")
    public List<BookDto> getBookByCategory(@RequestParam Category category) {
        return rentService.getBookByCategory(category);
    }

RentService.java

 public List<BookDto> getBookByCategory(Category category) {
        List<Book> book = bookRepository.findAllBookByCategory(category);
        return mapBookListToBooDtoList(book);
    }

BookRepository.java

public interface BookRepository extends JpaRepository<Book, Long> {
    
    @Query("select count(b) from Book b")
    List<Book> findAllBookByCategory(Category category);
}

从上面的代码我得到以下错误:

Required Category parameter 'category' is not present

【问题讨论】:

  • 旁注:考虑不要在 REST API 中混合资源(租金、书籍、书籍类别)(/booksCategory 在 RentController 中返回 BookDto)
  • 是的,我应该把它放在 BookController 和 BookService 中

标签: java spring-boot enums


【解决方案1】:

如果您检查您的查询,您会看到未使用参数类别。 此外,查询返回count(b),而不是返回类型所要求的书籍。

对于简单查询,您可以省略显式查询:

public interface BookRepository extends JpaRepository<Book, Long> {
    
    List<Book> findByCategory(Category category);
}

还要确保在调用服务时将类别作为查询参数传递给 HTTP 请求,例如:GET https://my-service-url/booksCategory?category=CLASSIC

【讨论】:

  • 您是否在 HTTP 请求中添加了类似 ?category=CLASSIC 的内容?
  • 不,应该吗?像参数
  • 您的控制器将类别定义为所需的RequestParam(=查询参数),所以是的,在调用您的服务时,您必须提供此查询参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2019-05-15
  • 2021-08-19
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
相关资源
最近更新 更多