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.
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
Es ist groovy, GORM fügt diese Methoden dynamisch zu Objekten hinzu, die als @Entity gekennzeichnet sind. –
Woher kommt die ID? oder kommt es auch von '@ Entity'? – Rao