如何始终为ResponseEntity <Collection <?>>返回JSON对象(而不是数组)?

时间:2019-11-28 17:33:53

标签: java json spring rest

根据this API指南,在响应正文中,您必须始终返回JSON对象(而不是数组)作为顶级数据结构,以支持将来的可扩展性。

是否有一种方便而优雅的方法可以通过Spring实现(无需将每个方法的返回类型都包装到包装对象中)?是否有配置属性或扩展点,可用于自定义spring如何将集合序列化为其JSON表示形式?

所以不是

[
{
    "Prop1": "Val1",
    "Prop2": "Val2"
},
{
    ...
}
]

以下方法

@GetMapping
public ResponseEntity<Collection<MyType>> get() {
    …
}

应该返回

{
"MyType":[
    {
        "Prop1": "Val1",
        "Prop2": "Val2"
    },
    {
        ...
    }
]
}

2 个答案:

答案 0 :(得分:1)

您可以尝试使用ResponseBodyAdvice

但是,如果要在控制器句柄之后修改响应,那么我想如果有的话,它会破坏api文档响应格式。

答案 1 :(得分:-2)

根据我对c#的经验,您可以执行以下操作: 根据属性准备您的列表,假设创建一个具有两个属性prop1和prop2的名为Prop的类 实例化您的课程列表

List<Prop> props=new List<Prop>();

然后用数据填充

props.add(new Prop{prop1=value,prop2=value});
props.add(new Prop{prop1=value,prop2=value});
props.add(new Prop{prop1=value,prop2=value});

注意:如果数据来自数据库,则可以使用for / foreach循环将数据添加到列表中

示例

foreach(var data in dbData){
  props.add(new Prop{prop1=data.value1,prop2=data.value2});
}

最后返回带有值列表的对象

在此处输入代码

return new {MyType=props};