Michael Vorburger created FINERACT-819:
------------------------------------------
Summary: Enable "normal" (usual) JSON mapping to request Java
objects
Key: FINERACT-819
URL: https://issues.apache.org/jira/browse/FINERACT-819
Project: Apache Fineract
Issue Type: Improvement
Affects Versions: 1.4.0
Reporter: Michael Vorburger
Based on experience/observation while attempting to implement FINERACT-726 via
[https://github.com/apache/fineract/compare/develop...vorburger:FINERACT-726_Auth]
:
In Fineract as is it does not seem to be easily possible to "just" write a JAX
RS *Resource API class with a method which instead of {{@QueryParam}} or
{{String apiRequestBodyAsJson}} like everywhere else in existing code simply
accepts a regular POJO class such as {{AuthenticateRequest}} - which is how JAX
RS (or even Spring MVC) is typically used; that fails with:
{noformat}
A message body reader for Java class
org.apache.fineract.infrastructure.security.api.AuthenticationApiResource$AuthenticateRequest,
and Java type class org.apache.fineract.in
frastructure.security.api.AuthenticationApiResource$AuthenticateRequest, and
MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy {noformat}
To move forward/unblock FINERACT-726, I've gone for the {{String
apiRequestBodyAsJson}} approach there, and then using {{GSON}} code to parse
the JSON explicitly, but that approach, used in other Resource classes in
Fineract as well, seems kind of really dumb, to me.
Perhaps in the future we can figure out the problem above, and switch to the
simpler more standard programming model everywhere.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)