2016-10-28 1 views
1

Ich versuche, GORM6 mit Springboot 1.4 in einem Proof-of-Concept-Projekt zu verwenden und ein Problem zu treffen. Der vollständige Projektcode lautet available here.IllegalArgumentException mit Gorm6 & Springboot 1.4

Ich betreibe das Projekt bootRun mit und curl laufen

$ curl localhost: 8080/Personen/-X PUT -d "nachName = doe & vorName = John"

Beim Versuch, speichern eine Domain-Klasse in einem Service von meiner Ruhe Controller genannt, hibernate/gorm wirft eine Illegal

Servlet.service() für Servlet [DispatcherServlet] in c ontext mit Pfad [] hat Ausnahme ausgelöst [Anforderungsverarbeitung fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.orm.hibernate5.HibernateSystemException: IllegalArgumentException trat aufrufenden getter von gorm.springboot.demo.model.Person.id auf; verschachtelte Ausnahme ist org.hibernate.PropertyAccessException: Illegal Getter von gorm.springboot.demo.model.Person.id aufgetreten Aufruf] mit Ursache java.lang.IllegalArgumentException: Objekt ist nicht Instanz deklarierte Klasse

Was wirklich merkwürdig ist, ist, dass ich einen Test habe, der den gleichen Dienst anruft und vergeht, also bin ich mir nicht sicher, ob ich gerade etwas falsch für meinen RestController/Dienst eingerichtet habe.

Main:

@SpringBootApplication 
@EnableTransactionManagement 
class Main { 
    public static void main(String[] args) { 
     SpringApplication.run(Main, args); 
    } 
} 

Model-Klasse:

@Entity 
class Person { 
    String lastName 
    String firstName 
} 

Controler Klasse:

@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-Klasse:

@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) 
    } 
} 

und schließlich meine Prüfung bestanden, die im Wesentlichen das gleiche wie die PUT-Methoden in meiner Ruhe Controller tun:

@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 
    } 
} 

Einsicht würde geschätzt.

+0

Nicht sicher über den Winterschlaf. Aber sicherlich schienen die Methoden von "PersonService" problematisch zu sein. 'get (id)' ist keine 'statische' Methode der' Person' Klasse. – Rao

+0

Es ist groovy, GORM fügt diese Methoden dynamisch zu Objekten hinzu, die als @Entity gekennzeichnet sind. –

+0

Woher kommt die ID? oder kommt es auch von '@ Entity'? – Rao

Antwort

0

Die Dokumentation für 6.0.4 hat das Problem identifiziert. Benötigen Sie diese Anmerkung hinzuzufügen, wenn springboot + gorm

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

Zusätzlich springboot-devtools hat ein laufendes Problem mit Hibernate 5. ich mein Projekt auf Github aktualisierte jetzt mit einer funktionierende Version zu sein.