我的问题本质上是this问题的后续。
@RestController
public class TestController
{
@RequestMapping("/getString")
public String getString()
{
return "Hello World";
}
}
在上面的代码中,Spring会在响应正文中添加"Hello World“。如何将字符串作为JSON响应返回?我知道我可以添加引号,但这感觉更像是黑客。
请提供任何示例来帮助解释此概念。
注意:我不希望将此内容直接写入HTTP响应正文,我希望返回JSON格式的字符串(我将我的控制器与RestyGWT一起使用,它要求响应采用有效的JSON格式)。
发布于 2015-06-17 23:07:35
要么返回text/plain
(就像在Return only string message from Spring MVC 3 Controller中一样),要么将字符串包装为某个对象
public class StringResponse {
private String response;
public StringResponse(String s) {
this.response = s;
}
// get/set omitted...
}
将响应类型设置为MediaType.APPLICATION_JSON_VALUE
(= "application/json"
)
@RequestMapping(value = "/getString", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
您将拥有一个如下所示的JSON
{ "response" : "your string value" }
发布于 2015-10-27 01:51:55
JSON本质上是PHP或JAVA上下文中的字符串。这意味着可以在响应中返回有效的JSON字符串。下面的内容应该可以。
@RequestMapping(value="/user/addUser", method=RequestMethod.POST)
@ResponseBody
public String addUser(@ModelAttribute("user") User user) {
if (user != null) {
logger.info("Inside addIssuer, adding: " + user.toString());
} else {
logger.info("Inside addIssuer...");
}
users.put(user.getUsername(), user);
return "{\"success\":1}";
}
这对于简单的字符串响应是可以的。但是对于复杂的JSON响应,您应该使用Shaun描述的包装器类。
发布于 2016-06-15 02:31:05
在一个项目中,我们使用JSONObject (maven dependency info)解决了这个问题。我们之所以选择这个,是因为我们更喜欢返回一个简单的字符串,而不是包装器对象。如果您不想添加新的依赖项,那么可以很容易地使用内部帮助器类。
示例用法:
@RestController
public class TestController
{
@RequestMapping("/getString")
public String getString()
{
return JSONObject.quote("Hello World");
}
}
https://stackoverflow.com/questions/30895286
复制相似问题