'Swagger return response: "can't parse JSON. Raw result:"
I am not sure why this is happening. My return statement for spring boot rest controller is something like below
return ResponseEntity.status(HttpStatus.OK).body("Successfully added");
Now on swagger UI i see response as below
can't parse JSON. Raw result:
Successfully added
why is this happening ?
Solution 1:[1]
This is happening because you are returning a string literal instead of a JSON object. I presume your return type would have been ResponseEntity<String> but this would not work and you would need to specify an object in the body. You can create a POJO that will hold the message for you, something like this:
public class YourResponseClass {
private String message;
//Constructors, getter and setter
}
Then while returning you need to change the return type to ResponseEntity<YourResponseClass> and then return your response:
return ResponseEntity.ok(new YourResponseClass("Successfully Added."));
Solution 2:[2]
Late to the game but will share my solution to this issue, as it surfaced for me in a Python Flask-based REST backend I was developing recently. You could have NaN values in your JSON, if your issue was similar to mine, albeit in Python.
My underlying issue
I too was getting "can't parse JSON" on the swagger side. Turns out that Python's standard library json import will allow "modern" but not-officially-JSON types, such as "NaN". And doing some calculations with floats and voila...As a strict parser fails with a type such as NaN, it's worth checking that you don't have these in your request JSON response.
Solved it with an encoder class
Though not a Java-specific answer, maybe my Python solution can help you solve the issue.
json.dumps(yourdata, cls=NumpyEncoder)
Where NumpyEncoder is some class that converts NaN values to JSON and/or your acceptable specifications. It might be the case that you too can include some encoder class in your code to remove NaN and/or other artifacts.
See my so answer for Python implementation details.
Solution 3:[3]
It is hard to say without seeing more code and the actual Swagger JSON, but it seems like the JSON has a syntax issue. Run it through a JSON validator to confirm. There are plenty of websites for this if you Google it.
Solution 4:[4]
The response type should be "text/plain" (produces = "MediaType.TEXT_PLAIN")
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Sabir Khan |
| Solution 2 | Jason R Stevens CFA |
| Solution 3 | HenryTK |
| Solution 4 | Googlian |
