У меня есть контроллер сущности и отдыха, когда я делаю запрос к своему контроллеру, он выдает это исключение:
java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [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
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
Я попытался изменить Integer на Long или String, это помогло решить мою проблему, но в этом случае мой объект Spring Data Rest для пользователя не работает.
Зачем вам объявлять идентификатор как строку, это uuid? Обычно идентификаторы имеют тип Long в сущности, особенно когда поле относительного идентификатора в базе данных имеет значение Big Integer.
Да, это UUID. Но теперь я заменил его примитивными числами.




Поскольку идентификатор является 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);
}
Для тех, кто находит эту проблему на основе ошибки:
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);
В этом случае используйте идентификатор типа (таким образом: findAllByTypeId).
Если вы используете 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 также является значением длинная. Если вы выполните метод
classObj.getMyEmployee(someIntVariable)
передача значения инт может вызвать указанную выше ошибку.
в моем случае я использовал DTO, поэтому
Ранее мой @query был таким
@query("SELECT ... WHERE ucs.district = ?1")
потом Я изменил @query вот так
@query("SELECT ... WHERE ucs.district.id = ?1")
Чего именно вы пытаетесь достичь?