2016-10-28 3 views
1

Я пытаюсь использовать 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 
    } 
} 

Любое понимание будет оценено.

+0

Не уверен, что спящий режим. Но, конечно, методы 'PersonService', казалось, были проблемы. 'get (id)' не является 'статическим' методом класса Person. – Rao

+0

Жесткий, GORM динамически добавляет эти методы к объектам, аннотированным как @Entity. –

+0

Где находится 'id'? или это также происходит от '@ Entity'? – Rao

ответ

0

Документация по 6.0.4 определила проблему. Нужно добавить эту аннотацию при использовании springboot + GORM

@JsonIgnoreProperties(['dirtyPropertyNames', 'errors', 'dirty', 'attached', 'version'])

Кроме springboot-DevTools имеет постоянную проблему с Hibernate 5. Я обновил свой проект на GitHub, чтобы быть рабочая версия теперь.

Смежные вопросы