Как преобразовать JSON с элементами массива в объект Java на Spring Boot - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу преобразовать JSON, который содержит элемент Array, например:

 [{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
,
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" }
,
{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.10835400000001, 42.409698 ], "pop" : 4546, "state" : "MA" }]

Элемент loc - это массив с двумя элементами внутри.У меня есть следующий код для преобразования JSON в объект Java:

public ModelAndView listCities() throws IOException {
    ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
    ObjectMapper mapper = new ObjectMapper();
    Cities[] obj = mapper.readValue(new File("routeOfTheJSONFile"), Cities[].class);
    mav.addObject("cities", obj);
    return mav;
}

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

import java.util.Arrays;

public class Cities {
    private String _id;
    private String city;
    private double[] loc;
    private String pop;
    private String state;

    public String get_id() {
        return _id;
    }

    public void set_id(String _id) {
        this._id = _id;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public double[] getLoc() {
        return loc;
    }

    public void setLoc(double[] loc) {
        this.loc = loc;
    }

    public String getPop() {
        return pop;
    }

    public void setPop(String pop) {
        this.pop = pop;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "Cities{" +
                "_id='" + _id + '\'' +
                ", city='" + city + '\'' +
                ", loc=" + Arrays.toString(loc) +
                ", pop='" + pop + '\'' +
                ", state='" + state + '\'' +
                '}';
    }
}

А HTML-код выглядит так:

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
    <title>Starbucks</title>
</head>
<body>
<div class="container">
    <div class="row justify-content-center">
        <div class="col">
            <table class="table">
                <thead>
                <tr>
                    <th>Id</th>
                    <th>City</th>
                    <th>Location</th>
                    <th>Population</th>
                    <th>State</th>
                </tr>
                </thead>
                <tbody>
                <tr th:each="city : ${cities}">
                    <td th:text="${city._id}"></td>
                    <td th:text="${city.city}"></td>
                    <td th:text="${city.loc}"></td>
                    <td th:text="${city.pop}"></td>
                    <td th:text="${city.state}"></td>
                </tr>
                </tbody>
            </table>
        </div>
    </div>

</div>


<script src="../js/jquery-3.3.1.min.js"></script>
<script src="../js/popper.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
</body>
</html>

Но когда я отображаю информацию в таблице, столбец loc выглядит следующим образом:

[D@6481f9f9
[D@41e9a11f
[D@af30d01

Это происходит в следующем формате

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 27 февраля 2019

Добавить дополнительный метод получения к Cities классу:

String getLocation() {
    return loc[0] + " " + loc[1];
}

И в сценарии использовать:

<td th:text="${city.location}"></td>

Или, если вы не хотите создавать какие-либо специальные методы получения, просто выполните итерациюloc таблица, как вы сделали для cities

РЕДАКТИРОВАТЬ
Вы всегда можете использовать ${#strings.arrayJoin(city.loc, ' ')} метод.

См .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...