简单字符串作为弹簧休息控制器中的 JSON 返回值 [英] Simple string as JSON return value in spring rest controller
问题描述
让我们来看看以下简单的测试控制器(与 Spring 4.0.3 一起使用):
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";
}
}
理论上,两个控制器方法都应该返回有效的 JSON.调用第一个控制器方法确实会返回以下 JSON 数组:
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"]
但是第二个控制器方法返回不带引号的字符串,这不是有效的 JSON 字符串:
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?
推荐答案
当您返回 String
对象时,Spring MVC 会将其解释为要放入响应正文的内容并且不会对其进行修改更远.如果您希望将实际字符串作为 JSON 响应,您需要自己引用它或通过 Jackson 显式运行它.
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.
这篇关于简单字符串作为弹簧休息控制器中的 JSON 返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!