REST API的JSON响应

时间:2018-09-17 08:26:15

标签: java json rest swagger

我已经用Java制作了REST API,并且具有以下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类中,我从sql获取上述DTO的数据,并使用以下代码返回响应:

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. 为什么即使我先声明isTypeSpecial,isTypeTrue还是先出现isTypeSpecial?
  4. 有什么方法可以学习buildResponse的工作原理吗?

2 个答案:

答案 0 :(得分:1)

  1. 因为顺序无关紧要。在JSON级别上,它基本上是无序的键值映射。顺序对您或解析的人都没有关系。 [ ... ]中的所有东西都将保持其顺序,因为那是一个有序列表/数组。
  2. 布尔字段在其getter命名方面有点特殊,请参见例如For a boolean field, what is the naming convention for its getter/setter?-is...与常规吸气剂的get...类似,因此被剥夺了。
  3. 与1相同。
  4. 是,例如设置一个断点并使用您的IDE +调试器进入该方法-但是看代码可能不会很有趣

答案 1 :(得分:0)

  1. 这是因为JSONObject实现默认情况下使用HashMap。 HashMap将按字母顺序对其进行排序。通常,JSON响应顺序是无关紧要的,如果答案包含您需要的值,那一切都很好。
  2. JSON框架通过从变量名称中删除“ is”和“ has”字来重命名原始变量。您可以通过添加@JsonProperty(value =“ isTypeSpecial”)

  3. 添加其他名称
  4. 此答案在答案1中有所说明,这是由于HashMap中的字母顺序

  5. 可以进行调试,但我想您不想承担太多债务

希望这能回答您的问题。