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

新手上路,请多包涵

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

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

在上面,Spring 会将“Hello World”添加到响应主体中。如何返回 String 作为 JSON 响应?我知道我可以添加引号,但这感觉更像是一个 hack。

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

注意: 我不想将其直接写入 HTTP 响应主体,我想以 JSON 格式返回字符串(我将我的控制器与 RestyGWT 一起使用,它要求响应采用有效的 JSON 格式)。

原文由 The Gilbert Arenas Dagger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 622
2 个回答

要么返回 text/plain (如在 Return only string message from Spring MVC 3 Controller 中)或者包装你的 String 是某个对象

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" }

原文由 Shaun 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 pinkal vansia 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题