具有嵌套属性的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,"values": [
      {
         "groupId": 4,"groupIndex": 8,"values": [
            {
               "sampleId": 2,"sampleIndex": 555
            },{
               "sampleId": 3,"sampleIndex": 6
            }
         ]
      }
   ]
}

解决方法

您可以尝试:

public class Group {
  private Long groupId;
  private Long groupIndex;
  private Long sampleId;
  private Long sampleIndex;
  private List<Group> values;
}

这是一种方法。不是唯一一个。

使用Long代替long。这样值就可以为空。

,

你能做的是

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;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...