Как прочитать ключевые значения из JSONObject в angular response из SprinBoot ResponseEntity

#java #angular #spring-boot #angular-httpclient

#java #angular #весенняя загрузка #angular-httpclient

Вопрос:

В моей серверной части Spring Boot я создал объект JSON из HashMap

 HashMap<String, ClassData> val = obj.unZipIt(file.getOriginalFilename());
        Gson Jobj = new Gson();
        System.out.println(Jobj.toJson(val));
        return ResponseEntity.status(HttpStatus.OK).body(Jobj.toJson(val));
  

В моем интерфейсе Angular я принимаю ответ объекта JSON

  obj= {};

.subscribe(event => {
        if (event.type === HttpEventType.UploadProgress) {
          this.progress.percentage = Math.round(100 * event.loaded / event.total);
        } else if (event instanceof HttpResponse) {
          console.log(event.body);
          this.obj['Classes'] = Object.values(event.body);
          console.log(this.obj['Classes']);
          document.getElementById("demo-content").style.display = "none";
        }
      }, (err) => {
        (err.error instanceof Error)
          let message = (`Code ${err.status}, Error was: ${err.error.errorMessage}`);
          alert(message)
      }
    );
  

когда я печатаю свой event.body , он выдает ответ JSON

{«FileProcessor»:{«filepath»:»C:tmpuntitledsrcFileProcessor.java»,»conceptList»:[]},»subClass»:{«filepath»:»C:tmpuntitledsrcsubClass.java»,»conceptList»:[{«parentClassName»:»Main»,»parentPath»:»C:tmpuntitledsrcMain.java»,»conceptName»:»Inheritence»,»lineNo»:1}]},»ProjectProcessor»:{«filepath»:»C:tmpuntitledsrcProjectProcessor.java»,»conceptList»:[]},»Main»:{«filepath»:»C:tmpuntitledsrcMain.java»,»conceptList»:[]},»ProjectReader»:{«filepath»:»C:tmpuntitledsrcProjectReader.java»,»conceptList»:[]}}

когда я пытаюсь извлечь значения ключа this.obj['Classes'] = Object.values(event.body); , он выдает массив, который отделен от одного символа

введите описание изображения здесь

есть ли способ получить ключевые значения из объекта JSON

Комментарии:

1. Верните ResponseEntity<Map<<Строка, ClassData>>: spring сериализует карту в JSON для вас и установит правильный тип содержимого. В данный момент вы возвращаете текстовый / обычный, а не application / json. Кроме того, используйте привязку в вашем интерфейсе, вместо того, чтобы выполнять манипуляции с DOM.

2. Привет @JBNizet после возврата <Map<<String, ClassData>> я получаю ошибку, подобную этой ERROR 13112 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "upload": Error resolving template [upload], template might not exist or might not be accessible by any of the configured Template Resolvers

3. Вам нужно аннотировать метод с помощью @ResponseBody или весь контроллер с помощью @RestController

4. @JBNizet Привет, я только что изменил значение на JASON Parse из интерфейса, и это работает