Skip to content

Validatable objects to JSON conversion fails in grails7 #15246

@jglapa

Description

@jglapa

Expected Behavior

Conversion of objects with the Validateable interface started complaining about something related to creditCard validation... Works fine in grails 6

class MyCommand implements grails.validation.Validateable {
     Long id
}

def command = new MyCommand(id:10)

def result = command as grails.converters.JSON

assert result.toString() == '{"errors":{"errors":[]},"id":10}'.toString()

Actual Behaviour

it fails:

Caused by: org.grails.web.converters.exceptions.ConverterException: Error converting Bean with class grails.validation.ConstrainedDelegate
	at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:88)
	at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:43)
	at grails.converters.JSON.value(JSON.java:205)
	at grails.converters.JSON.convertAnother(JSON.java:165)
	at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:47)
	at org.grails.web.converters.marshaller.json.MapMarshaller.marshalObject(MapMarshaller.java:32)
	at grails.converters.JSON.value(JSON.java:205)
	at grails.converters.JSON.convertAnother(JSON.java:165)
	at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:70)
	at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:43)
	at grails.converters.JSON.value(JSON.java:205)
	at grails.converters.JSON.render(JSON.java:140)
	at org.grails.web.converters.AbstractConverter.toString(AbstractConverter.java:123)
	... 41 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.grails.web.converters.marshaller.json.GroovyBeanMarshaller.marshalObject(GroovyBeanMarshaller.java:68)
	... 53 common frames omitted
Caused by: groovy.lang.MissingPropertyException: CreditCard constraint only applies to a String property
	at grails.gorm.validation.DefaultConstrainedProperty.isCreditCard(DefaultConstrainedProperty.groovy:403)
	at grails.validation.ConstrainedDelegate.isCreditCard(ConstrainedDelegate.groovy:124)
	... 58 common frames omitted

Steps To Reproduce

paste the snippet into a freshly bootstrapped project, can be a controller action or even bootstrap init method

Environment Information

No response

Example Application

No response

Version

7.0.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions