Simple string as JSON return value in spring rest controller
jackson, java, json, spring, spring-mvc
Solution
When you return a `String` object, Spring MVC interprets that as the content to put in the response body and doesn't modify it further. If you're wanting an actual string to be the JSON response, you'll need to either quote it yourself or run it through Jackson explicitly.
Problem
Let's take a look at the following simple test controller (Used with Spring 4.0.3): ``` @RestController public class TestController { @RequestMapping("/getList") public List<String> getList() { final List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); return list; } @RequestMapping("/getString") public String getString() { return "Hello World"; } } ``` In theory both controller methods should return valid JSON. Calling the first controller method indeed does return the following JSON array: ``` $ curl -i -H "Accept: application/json" http://localhost:8080/getList HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 ["1","2"] ``` But the second controller method returns the string without quotes which is not a valid JSON string: ``` $ curl -i -H "Accept: application/json" http://localhost:8080/getString HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Hello World ``` Why is that so? Can it be configured? Is it a bug? Or a feature I don't understand?