Ответ JSON для REST API - PullRequest
       10

Ответ JSON для REST API

0 голосов
/ 17 сентября 2018

Я сделал 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?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018
  1. Это потому, что реализация JSONObject по умолчанию использует HashMap.HashMap упорядочит его по алфавиту.В основном порядок ответов JSON не имеет значения, если в ответе содержится нужное вам значение, это все хорошо.
  2. Каркас JSON переименовывает ваши примитивные переменные, удаляя слова «is» и «has» изВаше имя переменной.Вы можете добавить другое имя, добавив @JsonProperty (value = "isTypeSpecial")

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

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

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

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