簡體   English   中英

參數值 [1] 與預期類型不匹配 [java.lang.Integer (n/a)]

[英]Parameter value [1] did not match expected type [java.lang.Integer (n/a)]

我有實體和休息控制器,當我向我的控制器發出請求時,它拋出這個異常:

java.lang.IllegalArgumentException:參數值 [1] 與預期類型不匹配 [java.lang.Integer (n/a)]

我的控制器:

@GetMapping("/createCharacter")
public Character createCharacters(@RequestParam("userId") Integer userId, @RequestParam("mapId") long mapId) {
    return createCharactersService.createCharacters(userId, mapId);
}

我的實體有 int 類型 id:

  @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

對於那些根據錯誤發現此問題的人:

java.lang.IllegalArgumentException: Parameter value [Type@abdc80fc] did not match expected type [Type (n/a)]

您可能會像這樣使用 JPA:

@Repository
public interface OtherRepository extends JpaRepository<Other, Long> {
    List<Other> findAllByType(final Type type);

在這種情況下,請使用 Type 的 id(因此: findAllByTypeId )。

由於 Id 是一個 uuid,您必須將其作為字符串保存在實體中。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;

因此,您必須在服務和控制器中將其用作字符串。

@GetMapping("/createCharacter")
public Character createCharacters(@RequestParam("userId") String userId, @RequestParam("mapId") long mapId) {
    return createCharactersService.createCharacters(userId, mapId);
}

就我而言,我使用過 DTO,所以

以前我的@query是這樣的

@query("SELECT ... WHERE ucs.district = ?1")

然后我像這樣改變了@query

@query("SELECT ... WHERE ucs.district.id = ?1")

例如,如果您將 JPA 與 @Query 一起使用:

 @Query("SELECT r FROM Employee r WHERE r.empId = ?1)
 Employee getMyEmployee(long id);

要么

@Query("SELECT r FROM Employee r WHERE r.empId = :id)
Employee getMyEmployee(@Param("id") long id);

確保傳遞的參數是值,並且empId也是值。 如果您通過傳遞int值來執行方法classObj.getMyEmployee(someIntVariable) ,則可能會導致上述錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM