Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Boot Rest API无效请求参数异常:java.lang.IllegalArgumentException:参数值[Computer]与预期类型不匹配_Java_Spring Boot_Spring Data Jpa - Fatal编程技术网

Spring Boot Rest API无效请求参数异常:java.lang.IllegalArgumentException:参数值[Computer]与预期类型不匹配

Spring Boot Rest API无效请求参数异常:java.lang.IllegalArgumentException:参数值[Computer]与预期类型不匹配,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,如何从OneToMany实体执行搜索?我有Book和Category`域模型 public class Category { private long id; private String name; @OneToMany(mappedBy = "category", cascade = CascadeType.ALL) private Set<Book> books; } public class Book { private long id;

如何从
OneToMany
实体执行搜索?我有
Book和
Category`域模型

public class Category {
   private long id;
   private String name;
   @OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
   private Set<Book> books;
}

public class Book {
   private long id;
   private String title;
   @ManyToOne
   @JoinColumn(name = "category_id")
   private Category category;
}
我的服务:

@Override
public Iterable<Book> findByCategory(String category) {
   return bookRepository.findByCategory(category);
}

谢谢。

查询参数的使用方式如下:

/books?category=Computer

删除查询参数的使用方式如下:

/books?category=Computer
移除/

移除/之后

然后在您的存储库中尝试

 Iterable <Book> findByCategoryName(String categoryName);
Iterable findByCategoryName(字符串categoryName);
删除/之后

然后在您的存储库中尝试

 Iterable <Book> findByCategoryName(String categoryName);
Iterable findByCategoryName(字符串categoryName);

如果您看到您的请求映射方法具有
@RequestParam
而不是
@PathVariable

@GetMapping("/books")
public String findAll(Model model,@RequestParam(value = "category", required = false) String category) {
...
...
...
// Your Code
}
所以,放置具有QueryParam/RequestParam的请求的正确方法是

/books?category=Computer // this request enables to get the service /books with request param (name = category) with value = Computer.
不是这样的

/books/?category=Computer  // this request is a invalid request.
如果你的映射是这样的

    @GetMapping("/books/category/{categoryName}")
    public String findAll(Model model,@PathVariable("categoryName") String category) {
    ...
    ...
    ...
    // Your Code
    }
那么这个请求对于这个RESTAPI是有效的

/books/category/Computer  // this request is a valid now.

如果您看到您的请求映射方法具有
@RequestParam
而不是
@PathVariable

@GetMapping("/books")
public String findAll(Model model,@RequestParam(value = "category", required = false) String category) {
...
...
...
// Your Code
}
所以,放置具有QueryParam/RequestParam的请求的正确方法是

/books?category=Computer // this request enables to get the service /books with request param (name = category) with value = Computer.
不是这样的

/books/?category=Computer  // this request is a invalid request.
如果你的映射是这样的

    @GetMapping("/books/category/{categoryName}")
    public String findAll(Model model,@PathVariable("categoryName") String category) {
    ...
    ...
    ...
    // Your Code
    }
那么这个请求对于这个RESTAPI是有效的

/books/category/Computer  // this request is a valid now.

我认为是一样的。我认为是一样的。如果我们遵循RESTAPI的命名约定,它应该是
/books
/books/{id}
/books/{id}/categories
/books/{bookId}/categories/{categoriid}
但我不能在
BookController
下应用它,因为它的目的是搜索所有类别与
category
的值相同的书籍。如果我们遵循RESTAPI的命名约定,它应该是
/books
/books/{id}
/books/{id}/categories
/books/{id}/categories
/books/{bookId}/categorid}
但我不能在
BookController
下应用它,因为它的目的是搜索所有类别与
category
的值相同的书籍。它应该在
类别控制器
下。谢谢。它可以工作,但应该是
findByCategoryName
。哦,显然应该是名称而不是标题。我只是忽略了它。我已经更新了我的答案,谢谢。它可以工作,但应该是
findByCategoryName
。哦,显然应该是名称而不是标题。我只是忽略了它。我现在更新了我的答案。我认为上一个标题更好。我认为上一个标题更好。