首页 > 解决方案 > 如何始终为 ResponseEntity 返回 JSON 对象(不是数组)>?

问题描述

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

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

所以而不是

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

以下方法

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

应该返回

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

标签: javajsonspringrest

解决方案


您可以尝试使用ResponseBodyAdvice

但是,如果您要在控制器处理后修改响应,那么我猜它会破坏 api 文档响应格式,以防万一。


推荐阅读