Spring MVC - 如何在 Rest Controller 中将简单字符串作为 JSON 返回

2022-08-31 07:04:08

我的问题基本上是对这个问题的后续。

@RestController
public class TestController
{
    @RequestMapping("/getString")
    public String getString()
    {
        return "Hello World";
    }
}

在上面,Spring会在响应正文中添加“Hello World”。如何返回字符串作为 JSON 响应?我知道我可以添加引号,但这感觉更像是一个黑客。

请提供任何例子来帮助解释这个概念。

注意:我不希望这直接写入HTTP响应正文,我想以JSON格式返回字符串(我正在使用我的控制器和RestyGWT,这需要响应采用有效的JSON格式)。


答案 1

要么返回(如从Spring MVC 3控制器仅返回字符串消息)或包装字符串是某个对象text/plain

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)

并且您将拥有一个看起来像

{  "response" : "your string value" }

答案 2

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所描述的包装类。