2010-09-09 7 views
1

Мне было интересно, как лучше всего обрабатывать запрос на обновление существующего объекта (например, Person) при получении запроса в виде запроса веб-службы.Плагин Grails CXF Webservice

В моем проекте у меня есть класс домена Person, и я бы хотел разоблачить операции CRUD как операцию webservice через плагин CXF. Так что я сделать PersonService и разоблачить методы с

static expose = ['cxfjax'] 

Тогда у меня есть метод обновления:

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 
    println "Updating $person" 
    return person.save() 
} 

В службе я получаю прекрасный объект Person, но даже если он имеет идентификатор существующий человек, создается новый человек, и идентификатор изменяется, чтобы отразить это.

SO ... как мне получить человека, которого я получаю «слитым» в сеанс Hibernate, чтобы Grails узнал его как существующего человека?

С наилучшими пожеланиями,

христианские

ответ

0

возможно ...

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 

    println "Updating $person" 
    def p = Person.get(person.id) 
    if (p) { 
    // what ever your merge logic is... 
    } else { 
    return person.save() 
    } 
} 
+0

Я надеялся, что каким-то образом вы можете повторно подключить входящего человека к сеансу Hibernate на основе идентификатора. Прямо сейчас, я действительно делаю, как вы предлагаете: Person p = new Person(); p.properties = incomingPerson.properties; p.save(); –

+0

так это сработало? –

0

Не 100% уверен, но делает attach() работу? т.е.

@WebResult(name = "person") 
@WebMethod(operationName = "update") 
Person update(@WebParam(name="person")Person person) { 
    println "Updating $person" 
    person.attach(); 
    return person.save() 
} 

Я думаю, что это точка метода.

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