在spring boot中检索特定字段

时间:2018-02-05 13:37:54

标签: java spring rest spring-boot spring-filter

我使用Spring启动了一个非常好的API,并且我试图找出实现部分响应结果的最佳方法。现在,我的/user/{Id}端点返回如下内容:

{
    "firstname": "Jhon",
    "lastname": "Doe",
    "address": "156 Proton street",
    "username": "jhonDoe",
    "email": "jhon.doe@email.com",
    "company": "Fiction corp"
}

我想要实现的是使用请求参数字段公开端点,我可以在其中指定要检索的属性,因此端点将类似于/users/{id}/fields=firstname,lastname,company,结果将是:

{
    "firstname": "Jhon",
    "lastname": "Doe",
    "company": "Fiction corp"
}

我已经做了一些研究,发现了一篇关于Squiggle库的文章,但是他们没有提到如何将它与Spring启动集成,如果还有其他任何库没有#&# 39; t必须只处理序列化,但是生成一个基于Spring数据(存储库)的自定义查询,只检索指定的字段将是最受欢迎的。

有这样的解决方案吗?或者有人已经知道如何在现有应用程序中配置Squiggle?

1 个答案:

答案 0 :(得分:1)

经过更多实验,我发现了在Controller中将Squiggly库与spring boot和spring web批注一起使用的最简单方法。您要做的唯一一件事就是添加配置类,如下所示:

@Configuration
@ConditionalOnClass(ObjectMapper.class)
public class SquigglyAutoconfigure {

@Bean
public FilterRegistrationBean squigglyRequestFilter(ObjectMapper objectMapper) {
        Squiggly.init(objectMapper, new RequestSquigglyContextProvider());

        FilterRegistrationBean<SquigglyRequestFilter> filter = new FilterRegistrationBean<>();
        filter.setFilter(new SquigglyRequestFilter());
        filter.setOrder(1);
        return filter;
    }
}

然后将查询参数“字段”添加到控制器内的任何端点时:

@RequestParam(name = "fields", required = false) String fields

您将过滤出回复。例如,使用这种响应主体:

{
  "id": "ISSUE-1",
  "issueSummary": "Dragons Need Fed",
  "issueDetails": "I need my dragons fed pronto.",
  "reporter": {
      "firstName": "Daenerys",
      "lastName": "Targaryen"
  }
}

当您使用 fields = id,reporter.firstName 发出请求时,您将获得:

{
  "id": "ISSUE-1",
  "reporter": {
      "firstName": "Daenerys"
  }
}

有关嵌套对象,集合和其他内容的更多示例: https://github.com/bohnman/squiggly-java#reference-object