You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I get a parsing exception when receiving an error message for the following API call
unirest.get(someURL).asObject(GenericType<List>)
The parsing message looks like this
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.util.ArrayList<SomeClass> from Object value (token JsonToken.START_OBJECT)
at [Source: (String)"{ "message": "Internal Server Error"}"; line: 1, column: 1]
This is caused by the fact that unirest tries to parse the error message to the List object even though it receives a status of >= 400.
@Override
public void onResponse(final HttpResponse<?> response, final HttpRequestSummary request, final Config config) {
response.ifFailure(httpResponse -> {
if (httpResponse.getStatus() == 404) {
throw new NotFoundException(
"Not found " + httpResponse.getStatusText());
}
httpResponse.
getParsingError().
ifPresentOrElse(error -> {
throw error; #I don't expect a parsing error here if the API returns i.e. Status 404 'SomeClass with id 1234 does not exist'
},
() -> {
throw new ExternalServiceException(httpResponse.getStatusText(), httpResponse.getStatus());
});
});
Expected behavior
I would expect the behavior to be the same as when I make the following call
unirest.get(someURL).asObject(SomeClass)
which does not result in a parsing error but allows me map the errormessage to my ErrorClass.
Screenshots
If applicable, add screenshots to help explain your problem.
Environmental Data:
Java Version 21
Version 4.4.0
Additional context
Errorhandling works fine with Normal Classes but shows strange behavior with GenericType<>.
The text was updated successfully, but these errors were encountered:
I wrote a test showing the behavior of the parsing exception. It throws in both asObject(Class) and in asObject(GenericType). which is indeed what I expected. Unirest will always attempt to parse the response even if its not a 200 response.
I get a parsing exception when receiving an error message for the following API call
unirest.get(someURL).asObject(GenericType<List>)
The parsing message looks like this
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type
java.util.ArrayList<SomeClass>
from Object value (tokenJsonToken.START_OBJECT
)at [Source: (String)"{ "message": "Internal Server Error"}"; line: 1, column: 1]
This is caused by the fact that unirest tries to parse the error message to the List object even though it receives a status of >= 400.
To Reproduce
unirest.get(someUrl) .queryString("fooNr", fooId) .asObject(new GenericType<List<SomeClass>>() { }) .mapBody(..... });
In my interceptor
Expected behavior
I would expect the behavior to be the same as when I make the following call
unirest.get(someURL).asObject(SomeClass)
which does not result in a parsing error but allows me map the errormessage to my ErrorClass.
Screenshots
If applicable, add screenshots to help explain your problem.
Environmental Data:
Additional context
Errorhandling works fine with Normal Classes but shows strange behavior with GenericType<>.
The text was updated successfully, but these errors were encountered: