Я пытаюсь использовать GORM6 с springboot 1.4 в доказательство концептуального проекта и попадания в проблему. Полный код проекта: available here.IllegalArgumentException с использованием Gorm6 & Springboot 1.4
Я запустить проект с помощью bootRun и запустить завиток
$ локон локальный: 8080/человек/-X PUT -d "LastName = лань & ПгвЬЫате = Джон"
При попытке сохранить класс домена в службе называется от моего контроллера покоя, спящий режим/Горм бросает IllegalArgumentException
Servlet.service() для сервлета [DispatcherServlet] в с ontext с путем [] бросил исключение [Обработка запроса не удалась; вложенное исключение: org.springframework.orm.hibernate5.HibernateSystemException: IllegalArgumentException произошло с использованием getter gorm.springboot.demo.model.Person.id; вложенное исключение составляет org.hibernate.PropertyAccessException: IllegalArgumentException произошел вызов геттера из gorm.springboot.demo.model.Person.id] с первопричину java.lang.IllegalArgumentException: объект не является экземпляра класса
объявляющего
Что действительно странно, так это то, что у меня есть тест, который вызывает тот же сервис и передает его, поэтому я не уверен, что у меня некорректная настройка для моего RestController/Service.
Главная:
@SpringBootApplication
@EnableTransactionManagement
class Main {
public static void main(String[] args) {
SpringApplication.run(Main, args);
}
}
Модель Класс:
@Entity
class Person {
String lastName
String firstName
}
Controler Класс:
@RestController()
@RequestMapping("/persons")
@Slf4j
class PersonController {
@Autowired
PersonService personService
@RequestMapping(value="/", method = RequestMethod.GET)
def list() {
return personService.getAllPersons()
}
@RequestMapping(value="/", method= RequestMethod.PUT)
def add(@RequestParam String lastName,@RequestParam String firstName) {
log.info("received request for l=${lastName}, f=${firstName}")
personService.save(new Person(lastName:lastName, firstName:firstName))
}
}
Класс обслуживания:
@Service('personService')
@Transactional
class PersonService {
def getAllPersons() {
return Person.list()
}
def save(Person p) {
p.save(true)
}
def getPerson(long id) {
return Person.get(id)
}
}
и, наконец, мой тест проходит, который, по существу, делают то же самое, что и методы PUT в моем контроллере отдыха:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Slf4j
class PersonSpec extends Specification {
@Autowired PersonService personService
def 'Persist a person'() {
when: "Person to add"
def p = new Person(lastName:"Rizzo", firstName:"Anthony")
then: "Persist that person"
personService.save(p)
expect: "Person to be saved"
personService.getAllPersons().size() > 0
personService.getPerson(p.id).lastName == p.lastName
}
}
Любое понимание будет оценено.
Не уверен, что спящий режим. Но, конечно, методы 'PersonService', казалось, были проблемы. 'get (id)' не является 'статическим' методом класса Person. – Rao
Жесткий, GORM динамически добавляет эти методы к объектам, аннотированным как @Entity. –
Где находится 'id'? или это также происходит от '@ Entity'? – Rao