Highlighted

SlingHttpServletRequest request value is null while Injecting SlingHttpServletRequest to the sling model adaptable to Resource and SlingHttpServletRequest.

manasip

11-05-2018

@Model(adaptables = {Resource.class, SlingHttpServletRequest.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL, resourceType = "reactaem/components/content/my-title")

@Exporter(name = "jackson", extensions = "json")

public class MyTitleModel {

private final Logger logger = LoggerFactory.getLogger(getClass());

@Inject

private String title;

@Inject

private String text;

@Inject

SlingHttpServletRequest slingRequest;

@PostConstruct

    public void init() {

if (slingRequest != null) {

String url = slingRequest.getRequestPathInfo().getResourcePath() ;

logger.info("URL=" + url);

}

else {

logger.info("SlingHttpServletRequest is null*****");

}

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

}

Replies

Highlighted

Vijayalakshmi_S

MVP

11-05-2018

Hi,

When the adaptable itself needs to be injected, we need to use an annotation named "@Self" along with "@Inject".

In this case, add self annotation to SlingHttpServletRequest.

See if it works with this.

Reference:

Apache Sling :: Sling Models

Highlighted

manasip

11-05-2018

I am developing on AEM 6.3

I have already tried:

@Self

@Inject

private SlingHttpServletRequest slingRequest;

and

@SlingObject

private SlingHttpServletRequest slingRequest;

Any other way to get the SlingHttpServletRequest object?

Highlighted
Highlighted

rajesh0926

30-03-2020

Seems to be order of the adaptables does matter here

adaptables = {SlingHttpServletRequest.class, Resource.class }

Having sling request first in the list is solving the issue for me