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
。哦,显然应该是名称而不是标题。我只是忽略了它。我现在更新了我的答案。我认为上一个标题更好。我认为上一个标题更好。