【问题标题】:Springboot hand JSON to frontendSpring Boot 和 JSON 到前端
【发布时间】:2018-11-14 22:43:12
【问题描述】:

我想根据请求将 JSON 传递给客户端。我的实际代码如下所示:

...
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.Resource;
...

@RestController
public class Controller {

    @Value("classpath:file.json")
    private Resource jsonFile;

    @GetMapping(path ="json", produces = "application/json")
    public String getJSON() {
        try (InputStream in = jsonFile.getInputStream()) {
            return IOUtils.toString(in, StandardCharsets.UTF_8.name());
        }
        catch ...
    }
}

...

jsonFile 是我想要将其内容发送回用户的 .json 文件,@Value 注释添加了类路径。

问题是:响应不仅是json,而且换行符被编码为\n,整个JSON被封装在引号中,使其成为一个大字符串而不是一个对象。由于 JSON 实际上是一个 .json 文件,我不想先将其解析为对象。

json文件看起来像:

{
  "thing1": [
    {
      "list1": [
        "abc"
      ],
      "subthing1": {
        "list1": [
          "aaa",
          "bbb"
        ],
        "list2": [
          "ccc"
        ],
        "list3": [
          "zzz"
        ],

      },
      "subthing2": 
      ...

编辑 1: Returning JSON object as response in Spring Boot 的答案最后一段指出“如果你想返回一个 json 序列化字符串,那么只需返回该字符串。”,对我来说是红色的:“如果你有一个json中的字符串,返回字符串"

【问题讨论】:

  • 什么是var?它在哪里声明?
  • 你得到了字符串,因为你的代码这么说。即返回 IOUtils.toString(in, StandardCharsets.UTF_8.name());请解释一下代码中的 var 是什么。
  • 对不起,没有看到你错过了什么信息,希望这是你要求的吗?还修复了错误地是 ät.RequestController 的 Class 注释被正确的 ät.RestController

标签: json spring-boot request-mapping


【解决方案1】:

使用字符串写入器:

class StringRespWriper {
    private String stringResponse;
    // get/set
}

并在控制器上返回:

@GetMapping(path ="json", produces = "application/json")
public StringRespWriper getJSON() {
    try (InputStream in = var.getInputStream()) {
    ....
}

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 2019-02-05
    • 1970-01-01
    • 2017-06-14
    • 2015-06-10
    • 2020-09-30
    • 2018-03-15
    • 2018-09-28
    • 2017-04-07
    相关资源
    最近更新 更多