参数值[1]与预期的类型[java.lang.Integer(n / a)]不匹配

时间:2019-04-12 16:09:11

标签: java spring spring-data

我有实体控制器和rest控制器,当我向控制器发出请求时,它将引发此异常:

  

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;

4 个答案:

答案 0 :(得分:0)

由于Id是uuid,因此必须将其作为字符串保留在实体中。

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

因此,您必须在Service和Controller中将其用作字符串。

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

答案 1 :(得分:0)

对于那些根据错误发现此问题的人:

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)。

答案 2 :(得分:0)

例如,如果您将JPA与@Query一起使用:

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

OR

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

确保传递的参数为 long 值,并且 empId 也是 long 值。如果执行该方法 classObj.getMyEmployee(someIntVariable) 通过传递 int 值,可能会导致上述错误。

答案 3 :(得分:0)

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

以前我的@query是这样的

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

然后我把@query改成这样

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