Springboot рука JSON для внешнего интерфейса - PullRequest
0 голосов
/ 05 июня 2018

Я хочу передать 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 добавляет classpath.

Проблемаis: Response - это не только json, но и разрывы строк кодируются как \n, и весь JSON заключен в кавычки, превращая его в одну большую строку вместо объекта.Поскольку JSON на самом деле является файлом .json, я не хотел бы сначала разбирать его на объект.

jsonFile выглядит следующим образом:

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

      },
      "subthing2": 
      ...

Редактировать 1: Возврат объекта JSON в качестве ответа в Spring Boot * В последнем абзаце ответов 1015 * говорится: «Если вы хотите вернуть сериализованную строку json, просто верните строку.», Что для меня красным цветом: «если у вас есть json встрока, возвращает строку "

1 Ответ

0 голосов
/ 05 июня 2018

Используйте wriper для String:

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

и верните его на контроллер:

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