如何将查询参数传递给Sling模型导出器

问题描述 投票:0回答:3

我必须实现一个 API,该 API 应导出 JSON 数据。例如,有一个容器组件和许多子组件。让我们假设,容器组件保存着国家,子组件是强大的不同州及其人口等。

因此API的职责是根据州名称或其他查询参数搜索人口。 我正在考虑使用 Sling 模型导出器的选项之一,因为我不必编写 Sling servlet,并且很容易将子组件导出为 json,但问题是,我找不到将请求参数传递给 Sling 模型的选项。 例如 http://some.com/country/jcr:content/parent-component.model.json 将给出子组件的结果,但是这里如何将请求参数传递到特定状态的此模型端点?

我知道可以创建 Sling servlet,但是可以使用 Sling 模型导出器来完成吗?

aem
3个回答
2
投票

您可以将

SlingHttpServletRequest
注入模型中,并从中获取请求参数。无论是在吸气剂中还是在您的
@PostConstruct
方法中。

但是没有可用于 RequestParameters 的注入器。这是出于安全原因。因此,如果您只使用

@Inject
,那么就不会发生注入不需要的值的情况。

PS:

@RequestAttribute
注入器用于请求属性,这是NOT查询参数。


0
投票

我确实遇到了完全相同的问题,看起来吊带模型导出器正在删除参数,但是我能够使用 request.getHeader("referrer") 解决这个问题,它为我们提供了完整的 URL,包括我们可以从中获取的参数提取参数。


0
投票

我能够通过以下方式收到请求:

@Model(adaptables = {SlingHttpServletRequest.class, Resource.class},
        defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL,
        resourceType = {"your-resource"})
@Exporter(name = "jackson", extensions = "json")
public class PageExporter {
...
@SlingObject
private SlingHttpServletRequest request;


 @PostConstruct
 protected void init() {
  String token = request.getParameter("token");

  // actually the resource object then became null but we can
  // still get it with
  resource = request.getResource();
 }

}

重要的好像是先有SlingHttpServletRequest,再有@SlingObject注解。

© www.soinside.com 2019 - 2024. All rights reserved.