首页 > 解决方案 > 具有嵌套属性的 Spring REST 请求(在树结构中)

问题描述

我用下面的bean创建了spring REST端点,我不确定“值”的类型应该是什么?

class Group
{
private long groupId;
private long groupIndex;
private List<????> values
}
class Sample
{
 private long sampleId;
 private long sampleIndex;
}

有时我会请求“值”作为组列表或样本列表。示例请求 Json:

请求 1:

{
   "groupId": 1,
   "groupIndex": 2,
   "values": [
      {
         "sampleId": 2,
         "sampleIndex": 555
      },
      {
         "sampleId": 3,
         "sampleIndex": 6
      }
   ]
}

要求 2:

{
   "groupId": 1,
   "groupIndex": 2,
   "values": [
      {
         "groupId": 4,
         "groupIndex": 8,
         "values": [
            {
               "sampleId": 2,
               "sampleIndex": 555
            },
            {
               "sampleId": 3,
               "sampleIndex": 6
            }
         ]
      }
   ]
}

标签: springspring-bootspring-rest

解决方案


你能做的是

class Group
{
private long groupId;
private long groupIndex;
private List<Object> values
}
class Sample
{
 private long sampleId;
 private long sampleIndex;
}

然后使用自定义反序列化器,您可以将List类型插入到GroupSample。恕我直言,我发现这很混乱,而且端点过于复杂。我会将端点拆分为 2 个不同的方法,它们接受不同的请求主体,但保持 URL 相同。Spring 应该能够确定哪个方法获取哪个对象类型。这只有在深入一层时才有效。

class SuperGroup
{
private long groupId;
private long groupIndex;
private List<Group> values
}
class Group
{
private long groupId;
private long groupIndex;
private List<Sample> values
}
class Sample
{
 private long sampleId;
 private long sampleIndex;
}


推荐阅读