Ответ JSON для REST API

Я сделал REST API на java, и у меня есть следующий DTO.

@ApiModel(value = "testType", description = "Test type")
public class TestType
{
    private int type;
    private String typeName;
    private boolean isTypeSpecial;
    private boolean isTypeTrue;

    @JsonInclude(JsonInclude.Include.NON_ABSENT)
    private List<typeMasterDTO> typeMasterList;

    public TestType()
    {
    }

    @ApiModelProperty(example = "0", value = "Type", required = true)
    public int getType()
    {
        return type;
    }

    public void setType(int type)
    {
        this.type= type;
    }

    @ApiModelProperty(example = "Dragon", value = "Name of the typw",             required = true)
    public String getTypeName()
    {
        return typeName;
    }

    public void setTypeName(String typeName)
    {
        this.typeName= typeName;
    }

    @ApiModelProperty(value = "It is a special type", required = true)
    public boolean isTypeSpecial()
    {
        return isTypeSpecial;
    }

    public void setTypeSpecial(boolean isTypeSpecial)
    {
        this.isTypeSpecial= isTypeSpecial;
    }

    @ApiModelProperty(value = "It is a true type", required = true)
    public boolean isTypeTrue()
    {
        return isTypeTrue;
    }

    public void setTrueType(boolean isTypeTrue)
    {
        this.isTypeTrue= isTypeTrue;
    }

    @ApiModelProperty(value = "List of types")
    public List<typeMasterDTO> getTypeMasterList()
    {
        return typeMasterList;
    }

    public void setTypeMasterList(List<typeMasterDTO> typeMasterList)
    {
        this.typeMasterList= typeMasterList;
    }

}

В своем классе API я получаю данные для указанного выше DTO из sql и возвращаю ответ, используя код:

Response com.mmp.rest.AbstractResource.buildResponse(Response<?> response, ResponseMode mode)

Результат, который я получаю, выглядит так:

[
      {
            "type": 1,
            "typeName": "New type",
            "typeMasterList": [
                {
                    "typeMaster": 0,
                    "typeMasterName": "Default"
                },
                {
                    "typeMaster": 1,
                    "typemasterName": "Custom"
                }
            ],
            "TypeTrue": false,
            "TypeSpecial": true
    }
]

Итак, мои сомнения:

  1. Почему список объектов занимает третье место в ответе, хотя я объявил его последним в DTO?
  2. Почему isTypeTrue и isTypeSpecial отображаются в выходных данных как TypeTrue и TypeSpecial?
  3. Почему сначала появился isTypeTrue, а потом isTypeSpecial, хотя я первым объявил isTypeSpecial?
  4. Есть ли способ узнать, как работает buildResponse?
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
468
2

Ответы 2

  1. Потому что порядок не имеет значения. На уровне JSON это в основном неупорядоченная карта значений ключей. Порядок не должен иметь значения ни для вас, ни для того, кто разбирает. Только вещи внутри [ ... ] сохранят свой порядок, поскольку это упорядоченный список / массив.
  2. логические поля немного особенные в именах получателей, см., например, Каково соглашение об именах для логического поля для его получателя / установщика? - is... похож на get... для обычных геттеров и поэтому удален.
  3. то же, что и 1.
  4. да, например установите точку останова и войдите в метод с помощью отладчика IDE + - но, вероятно, будет неинтересно смотреть на код

Вау, это было точно и информативно ... спасибо Однако я попытался выполнить отладку в Response Builder и ввел страницу «Источник не найден ... Файл Jar не имеет вложенного источника».

Rohan Joseph George 17.09.2018 12:41

@RohanJosephGeorge, какую IDE вы используете?

luk2302 17.09.2018 12:44

Я использую затмение

Rohan Joseph George 17.09.2018 12:47
  1. Это связано с тем, что реализация JSONObject по умолчанию использует HashMap. HashMap отсортирует их в алфавитном порядке. В большинстве случаев порядок ответа JSON не имеет значения, если ответ содержит нужное вам значение, все в порядке.
  2. Фреймворк JSON переименовывает ваши примитивные переменные, удаляя слова «is» и «has» из имени переменной. Вы можете добавить другое имя, добавив @JsonProperty (value = "isTypeSpecial")

  3. Этот ответ указан в ответе 1, это из-за алфавитного порядка в HashMap

  4. Можно с отладкой, но я думаю, вам не захочется слишком сильно влезать в долги

Надеюсь, это ответит на ваши вопросы.

Да, это ответило на мои вопросы. @JsonProperty - отличный способ обойти это, спасибо.

Rohan Joseph George 17.09.2018 12:43

Другие вопросы по теме