【问题标题】:How to return a subset of object properties from a Spring Boot restful GET call?如何从 Spring Boot RESTful GET 调用中返回对象属性的子集?
【发布时间】:2017-12-19 03:35:43
【问题描述】:

新手问题...

我正在构建我的第一个 Spring Boot RESTful 服务,并希望支持返回实体集合的 GET 调用。喜欢:

/api/customers/

但是,对于某些消费者(例如 Web UI 中的列表页面),他们只需要客户实体属性的子集。

我想我可以将请求参数添加到我的 GET 调用中,以设置消费者特定的字段要求,例如

/api/customers/?fields=id,name,address

但是在 Java RESTful 控制器中实现这一点的最佳方式是什么?

目前在我的休息控制器中,“GET”是映射到 Java 方法的请求,例如

@RequestMapping(value="/", method= RequestMethod.GET)
public Customer[] getList() {
  Customer[] anArray = new Customer[];
  ....
  return anArray;
}

是否有可能以某种方式干预默认的 Java 到 Json 响应正文的转换,以便只包含所需的属性?

TIA

【问题讨论】:

  • 子集的数量是否已知,或者消费者可以要求任何字段组合?嵌套字段呢?您可能想查看Facebook graph API,它可以满足您的需求。 GET graph.facebook.com/me?fields=id,name,picture
  • 我看到有两个主要字段子集场景:简单列表,其中只需要客户 ID 和名称;和表格列表,其中可能需要其他属性,例如:地址、联系电话等。

标签: java json rest


【解决方案1】:

添加fields参数是个好主意,根据http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#limiting-fields的最佳实践

如何去掉字段?

1) 将它们设置为null,可能在使用@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) 注释的专用输出类中

或者

2) 使用SimpleBeanPropertyFilter 看一个很好的分步教程here 5。使用过滤器忽略字段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2022-01-01
    • 2022-01-23
    • 2015-05-23
    相关资源
    最近更新 更多