Установите для JSON данных значение Java Модель и выполните итерацию по Jsp - PullRequest
0 голосов
/ 30 марта 2020

Я новичок в работе с Api в java. Может ли кто-нибудь помочь реализовать это в лучшем виде. У меня есть JSON ОБЪЕКТ. как ..

{
  "firstState": {
    "district": {
      "first": {
        "polulation": 100000,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
      "second": {
        "polulation": 326565,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      }
    }
  },
  "secondState": {
    "district": {
      "first": {
        "polulation": 70000,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
      "second": {
        "polulation": 15245,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      }
    }
  }
}

Я хочу отобразить все это значение в модели, чтобы я мог показать эти значения в jsp. мой класс для этого объекта:

public class States {

    @JsonProperty("firstState")
    private Districts kerala;

    @JsonProperty("secondState")
    private Districts kerala;
getter settter....
}


class Districts {
    @JsonProperty("district")
    private Object districts;
getter settter....
    }

мой код контроллера:

String result = restTemplate.getForObject(url, String.class);
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode = objectMapper.readTree(result);
            States states = objectMapper.treeToValue(jsonNode, States.class);

Может ли кто-нибудь помочь мне, как мне поступить?

1 Ответ

0 голосов
/ 01 апреля 2020

Во-первых, ваше отображение JSON немного отклонено. Для исправления см. Ниже.

public class States {
    @JsonProperty("firstState")
    private Districts kerala1;

    @JsonProperty("secondState")
    private Districts kerala2;

    // getter, setter
}

public class Districts {
    @JsonProperty
    private District district;

    // getter, setter
}

public class District {
    @JsonProperty
    private DistrictInfo first;

    @JsonProperty
    private DistrictInfo second;
    // getter, setter
}

public class DistrictInfo {
    @JsonProperty
    private long polulation;

    @JsonProperty
    private String lastupdatedtime;

    @JsonProperty
    private Delta delta;

    // getter, setter
}

public class Delta {
    @JsonProperty
    private long confirmed;

    // getter, setter
}

В вашем контроллере вам не нужно использовать ObjectMapper напрямую, поскольку Spring абстрагирует его от вас как часть RestTemplate, если он имеет MappingJackson2HttpMessageConverter в качестве доступного конвертера сообщений (что Spring Boot делает для вас). См. https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest -resttemplate для получения дополнительной информации об использовании RestTemplate.


@GetMapping
public String getStates(Model model) {
    model.addAttribute("states", restTemplate.getForObject(url, States.class));
    return "path/to/statesJsp"
}

В вашем JSP используйте точечную нотацию для обхода полей States.

<h1>Kerala First District Population</h1>
<p>${state.kerala1.district.first.polulation}</p>

Обратите внимание, я уже давно не использую JSP, но теоретически это должно быть сделано.

...