java.lang.IllegalArgumentException: значение параметра [1604438222] не соответствует ожидаемому типу [java.lang.Integer (н / д) - PullRequest
0 голосов
/ 01 марта 2019

У меня есть отдельное приложение, которое вызывает "Вверх" и получает ошибку ниже, когда звонит "http://localhost:8080/user/person/1604438222".(trying, чтобы получить данные идентификатора человека из БД)

2019-03-01 11: 23: 34.296 ОШИБКА 52000--- [nio-8080-exec-1] oaccC [. [. [/]. [dispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса; вложенное исключениеis org.springframework.dao.InvalidDataAccessApiUsageException: значение параметра [1604438222] не соответствует ожидаемому типу [java.lang.Integer (n / a)]; вложенным исключением является java.lang.IllegalArgumentException: значение параметра [1604438222] не соответствует ожидаемомутип [java.lang.Integer (н / п)]] с основной причиной

java.lang.IllegalArgumentException: значение параметра [1604438222] не соответствует ожидаемому типу [java.lang.Integer (н / д)] at org.hibernate.query.spi.QueryParameterBindingValidator.validate (QueryParameterBindingValidator.java:54) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.query.spi.QueryParameterBindingValidator.validate (QueryParameterBindingValidator.java:27) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final]

  1. Класс контроллера:

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
    
        @Autowired
        PersonRepository personRepository; 
    
         @GetMapping("/person/{prsId}")
         public Person getPerson(@PathVariable Long prsId) {
              return personRepository.findByPrsId(prsId);
         }
    }
    
  2. Репозиторий:

    @Repository
    public interface PersonRepository extends  CrudRepository<Person, Long>
    {
        Person findByPrsId(Long Id);
    
    }
    
  3. POJO

    @Entity
    @Table(name = "Person")
    public class Person {
    
        @Column(name = "Prs_Id")
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer prsId;
    
        @Column(name = "P_Email_Internet_Addr", nullable = true, length = 255)
        private String email;
    
    
        protected Person() {
        }
    
    
        public Integer getPrsId() {
            return prsId;
        }
    
        public void setPrsId(Integer prsId) {
            this.prsId = prsId;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
    
        @Override
            public String toString() {
                    return "User [prsId=" + prsId + ", email=" + email 
                     + "]";
            }
        }
    

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы используете Integer в POJO и Long в репозитории и контроллере.Измените либо все из них, чтобы использовать Integer или Long.

0 голосов
/ 01 марта 2019

2,147,483,647 - это значение для Integer.MAX_VALUE

2,304,438,636 слишком велико, чтобы содержаться в переменной Integer

Использовать Long вместо идентификаторов в целом,Или, что еще лучше, примитив long, поскольку в идеале ваши идентификаторы никогда не должны быть null

...