java – 在spring boot中检索特定字段

我使用
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引导集成,另外如果有任何其他库不需要只处理序列化而是生成基于自定义的查询在Spring数据(存储库)上只检索指定的字段将是最受欢迎的.

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

最佳答案 经过更多的实验,我找到了在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;
    }
}

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

@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

点赞