Raymond Holguin
Raymond Holguin

Reputation: 1122

Grails 3: Disable database binding for incoming data

In Grails If I have a Command object such as

class MyCommand {
   MyObject object;
}

If the incoming request data has an ID value for object then when the Grails data binding occurs my command object is actually populated with a instance of the object from the database.

I don't want this. I just want a new instance of MyObject populated with the incoming request data. I don't care of if there is already an instance in the DB with the same ID, I will handle that on my own.

How can disable this DB type data-binding at either a global level or preferably some way (annotation?) at the property level.

The only other alternative I can think of is when I send the request data I will have the ID values and object properties separate and join them later. I don't want to do that if it can be avoided.

Upvotes: 0

Views: 55

Answers (1)

Orubel
Orubel

Reputation: 324

You can have endpoints called differently using ROLES. For example:

def show(){

    Person user = new Person()
    if(isSuperuser() && params?.id){
        user = Person.get(params.id.toLong())
    }else{
        user = Person.get(springSecurityService.principal.id)
    }
    ...

}

This sets it up so only admin's can supply the ID otherwise it uses the principal to get the logged in user.

Upvotes: 0

Related Questions