Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 ?

like image 593
user9735824 Avatar asked Sep 06 '25 16:09

user9735824


2 Answers

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."));
like image 112
Shwetabh Shekhar Avatar answered Sep 09 '25 09:09

Shwetabh Shekhar


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.

like image 44
Jason R Stevens CFA Avatar answered Sep 09 '25 09:09

Jason R Stevens CFA