【问题标题】:Set JSON Data to Java Model and Iterate Over Jsp将 JSON 数据设置为 Java 模型并迭代 Jsp
【发布时间】:2020-03-30 16:24:24
【问题描述】:

我是在 java 中使用 Api 的新手。任何人都可以帮助以更好的方式实现这一点。我有一个 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);

谁能指导我如何进行?

【问题讨论】:

    标签: java spring-boot jsp jackson jackson-databind


    【解决方案1】:

    首先,您的 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 为你)。有关RestTemplate 用法的更多信息,请参阅https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-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 已经有一段时间了,但理论上应该这样做。

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多