我有实体控制器和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;
答案 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")