我使用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?
答案 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