By default, AEM queryBuilder, which is how servlets can lookup content, responds with the data encoded in iso-8859 char set instead of the required UTF-8. The solution, which seems improbable, but works, is to create /osgiconfig/config/org.apache.sling.engine.impl.SlingMainServlet.cfg.json file with the following content:
{
"sling.additional.response.headers":[
"X-Content-Type-Options=nosniff",
"Content-Type=text/html;charset=utf-8",
"X-Frame-Options=SAMEORIGIN"
]
}
This fixes the queryBuilder returning data with the wrong charset in the servlet, but has the side effect of making the response header always "text/html". We want our servlets, which are used by the front end to search for and pull page pages as json, to have a content-type of application/json. however, if we change the above file, it will then break AEM.
We tried overriding the content type in the servlet itself, but this gets ignored (or overwritten).
Any ideas how to support both UTF-8 and application/json just for our servlets?
Views
Replies
Total Likes
Hi @TB3dock
Please check "Apache Sling Request Parameter Handling" configuration in /system/console/configMgr and see what value "sling.default.parameter.encoding" property is holding. If it's set to "ISO-8859-1" please change it to "UTF-8"
Default value should be "UTF-8".
its the cloud SDK running locally, but I assume its the same issue on the hosted version. Ultimately, both have to work, and currently I can only chose between getting a UTF-8 char response, or a JSON response, I cant have both which is an issue for the API integrations which expect application/json response type.
+1 having the same issue. Could solve this using the code below (be sure to maintain the order! doesn't take the value otherwise):
response.setStatus(statusCode); response.setContentType(ContentTypeUtil.TYPE_JSON); response.setCharacterEncoding(CharEncoding.UTF_8); response.getWriter().write(json.toString());
Thanks for the solution I had the same issue and resolved with your answer
Views
Replies
Total Likes
This solution didnt work for us, because we have so many servlets, maintained by different teams, returning responses in hundreds of places in different ways. AEM forces you to choose between UTF-8 or application/json, you can't have both (without a significant rewrite of the code and very large cost of retesting every aspect). I would say that the "side effect" of setting UTF-8 causing the response type to change to text is a pretty serious bug.
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies