Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InstantiationException when using the BeanIntrospectionModule #518

Closed
alvarosanchez opened this issue Apr 30, 2020 · 3 comments
Closed

InstantiationException when using the BeanIntrospectionModule #518

alvarosanchez opened this issue Apr 30, 2020 · 3 comments

Comments

@alvarosanchez
Copy link
Member

Given this JSON

{
   "content":[
      {
         "id":4,
         "title":"The Institute",
         "pages":700
      },
      {
         "id":2,
         "title":"The Shining",
         "pages":600
      },
      {
         "id":1,
         "title":"The Stand",
         "pages":1000
      }
   ],
   "pageable":{
      "number":0,
      "sort":{
         "orderBy":[
            {
               "property":"title",
               "direction":"ASC",
               "ignoreCase":false,
               "ascending":true
            }
         ],
         "sorted":true
      },
      "size":10,
      "offset":0,
      "sorted":true
   },
   "totalSize":3,
   "totalPages":1,
   "empty":false,
   "size":10,
   "offset":0,
   "numberOfElements":3,
   "pageNumber":0
}

And this mapping:

@Get("/{title}")
Page<Book> findByTitleLike(
        String title,
        @QueryValue int page,
        @QueryValue int size,
        @QueryValue(defaultValue = "title, desc") String sort);

Deserialization produces the following exception:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: No default constructor exists (through reference chain: io.micronaut.data.model.Page["pageable"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1714)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:530)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:417)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1287)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4218)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3309)
	at io.micronaut.jackson.codec.JacksonMediaTypeCodec.decode(JacksonMediaTypeCodec.java:173)
	... 48 common frames omitted
Caused by: io.micronaut.core.reflect.exception.InstantiationException: No default constructor exists
	at io.micronaut.data.model.$Pageable$Introspection.instantiate(Unknown Source)
	at io.micronaut.jackson.modules.BeanIntrospectionModule$BeanIntrospectionDeserializerModifier$1.createUsingDefault(BeanIntrospectionModule.java:379)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:277)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
	at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:530)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:528)
@graemerocher
Copy link
Contributor

Requires upgrading to Micronaut 2.x or disabling the Bean introspection module for the moment. Either way it is niche use case.

@rohitkg98
Copy link
Contributor

Not able to use Page as a return type in Declarative Client due to this.
Can anyone guide me on how to fix it? Happy to make a PR.

@graemerocher
Copy link
Contributor

@rohitkg98 the true fix just required upgrading to Micronaut 2, now that that is done nothing else is needed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants