尝试使用 JPA 查询我的数据库时出现 500 错误
Getting 500 error when trying to query my db with JPA
这是我得到的错误:
Parameter value [\] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [\] did not match expected type [java.lang.String (n/a)]
我有一个基本站点,允许您创建包含标题、艺术家和评级的“歌曲”。您可以 edit/delete 歌曲,应用程序将在主页上显示所有歌曲。它具有按评分降序排列歌曲的功能,该功能有效,并且具有搜索功能,但只有一半有效。
我不明白这是怎么回事,因为当我第一次使用该功能搜索时它有效,然后在第二次搜索时它总是抛出这个错误。
深入挖掘,我认为这些错误行是相关的:
at jdk.proxy3/jdk.proxy3.$Proxy112.findByArtistContaining(Unknown Source)
at com.cshannon.lookify.services.SongService.findByArtist(SongService.java:50)
at com.cshannon.lookify.controllers.MainController.search(MainController.java:105)
我不明白为什么它认为我输入的字符串是一个未知的来源,而当我第一次没有错误地输入它时。我已经尝试将路线从 Get 更改为 Post,但没有任何区别。
控制器代码:
@GetMapping("/search")
public String search(
Model model,
@RequestParam(value="search") String search
) {
if (search.isEmpty()) {
return "redirect:/dashboard";
}
ArrayList<Song> songs = ss.findByArtist(search);
model.addAttribute("songs", songs);
return "search.jsp";
}
服务:
// Find by artist
public ArrayList<Song> findByArtist(String search) {
return (ArrayList<Song>) sr.findByArtistContaining(search);
}
存储库:
ArrayList<Song> findByArtistContaining(String search);
如果这对我有帮助的话,这是我用来从用户那里获取字符串的表单:
<form action="/search" class="d-flex">
<input type="search" name="search" class="form-control me-2" placeholder="Search" aria-label="Search"/>
<input type="submit" value="Search Artists" class="btn btn-outline-success"/>
</form>
哇,我发现问题了。我不知道对此的低级解释,但出于某种原因,Spring Boot 2.6.6 并在依赖项中将其更改为 2.6.3 修复了它。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
如果您想修复安全问题 CVE-2022-22968 和这个错误,您可以使用 spring-boot 版本 2.5.13
这是我得到的错误:
Parameter value [\] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [\] did not match expected type [java.lang.String (n/a)]
我有一个基本站点,允许您创建包含标题、艺术家和评级的“歌曲”。您可以 edit/delete 歌曲,应用程序将在主页上显示所有歌曲。它具有按评分降序排列歌曲的功能,该功能有效,并且具有搜索功能,但只有一半有效。
我不明白这是怎么回事,因为当我第一次使用该功能搜索时它有效,然后在第二次搜索时它总是抛出这个错误。
深入挖掘,我认为这些错误行是相关的:
at jdk.proxy3/jdk.proxy3.$Proxy112.findByArtistContaining(Unknown Source)
at com.cshannon.lookify.services.SongService.findByArtist(SongService.java:50)
at com.cshannon.lookify.controllers.MainController.search(MainController.java:105)
我不明白为什么它认为我输入的字符串是一个未知的来源,而当我第一次没有错误地输入它时。我已经尝试将路线从 Get 更改为 Post,但没有任何区别。
控制器代码:
@GetMapping("/search")
public String search(
Model model,
@RequestParam(value="search") String search
) {
if (search.isEmpty()) {
return "redirect:/dashboard";
}
ArrayList<Song> songs = ss.findByArtist(search);
model.addAttribute("songs", songs);
return "search.jsp";
}
服务:
// Find by artist
public ArrayList<Song> findByArtist(String search) {
return (ArrayList<Song>) sr.findByArtistContaining(search);
}
存储库:
ArrayList<Song> findByArtistContaining(String search);
如果这对我有帮助的话,这是我用来从用户那里获取字符串的表单:
<form action="/search" class="d-flex">
<input type="search" name="search" class="form-control me-2" placeholder="Search" aria-label="Search"/>
<input type="submit" value="Search Artists" class="btn btn-outline-success"/>
</form>
哇,我发现问题了。我不知道对此的低级解释,但出于某种原因,Spring Boot 2.6.6 并在依赖项中将其更改为 2.6.3 修复了它。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
如果您想修复安全问题 CVE-2022-22968 和这个错误,您可以使用 spring-boot 版本 2.5.13