Splecial characters in RTE are displayed differently after conversion to JSON view | Community
Skip to main content
Level 2
February 1, 2019

Splecial characters in RTE are displayed differently after conversion to JSON view

  • February 1, 2019
  • 4 replies
  • 6048 views

1. Created a custom component dialog, which has field='Answer Text' with richtext field

2. Gave Special characters as input

3. Create Sling Model Exporter for JSON output

@PostConstruct

public void invokepost() {

if (answerText != null && !answerText.isEmpty()) {

answerText = formatAnswerRTEText(answerText);

}

}

// In this method, rteText is passed as a parameter which needs to be trimmed and covered with double quotes and remove all the new lines in the text

private String formatAnswerRTEText(String rteText) {

String modifiedRteText = null;

modifiedRteText = "\"" + rteText.trim() + "\"";

modifiedRteText = modifiedRteText .replaceAll("\\r|\\n", "");

return modifiedRteText ;

}

4. JSON output is not displaying special characters

Please guide me in resolving this issue. (Special characters should be displayed as it is in JSON output)

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

4 replies

Gaurav-Behl
Level 10
February 1, 2019

Make sure to export the content as "UTF-8", check the sling exporter version per below link-

[SLING-7344] Jackson Sling Model Exporter needs correct character encoding - ASF JIRA

test with latest version and revert

Level 2
February 4, 2019

I have followed to crate similar servlet, I am getting error at json = object.writeValueAsString(answerModel); for writeValueAsString

@SlingServlet(

resourceTypes = {AHMJsonServiceConstants.ANSWER_RT},

selectors = "servlet",

extensions = "json",

methods = "GET"

)

public class ContentServlet extends SlingSafeMethodsServlet {

private static final long serialVersionUID = -1765279544984834180L;

private static Logger LOG = LoggerFactory.getLogger(AnswerModel.class);

@Override

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {

        Resource answerResource = request.getResource();

        AnswerModel answerModel = answerResource.adaptTo(AnswerModel.class);

       

        Object object = new Object();

        String json = "{}";

        try {

            json = object.writeValueAsString(answerModel);

        } catch (RepositoryException e) {

        LOG.error(AHMJsonServiceConstants.MSG_PROCESSING_ERROR + e.getMessage());

            // Silently die as this is a POC

        }

        // The magic to make localized content work.

            // BOTH ContentType and CharacterEncoding must be set.

            response.setContentType("application/json");

            response.setCharacterEncoding("UTF-8");

            response.getWriter().write(json);

Gaurav-Behl
Level 10
February 4, 2019

could you share the error trace?

this is incomplete code as I can't interpret a lot of lines-

-resourceTypes = {AHMJsonServiceConstants.ANSWER_RT},

AnswerModel answerModel = answerResource.adaptTo(AnswerModel.class);

Level 2
February 4, 2019

Answer Model is a JSON sling model exporter with 3 fields, 2 are RTE fields.

smacdonald2008
Level 10
February 4, 2019

I am checking with the team - I have never seen this use case of wanting to export spec chars in JSON before.

Level 2
February 6, 2019

Thank you guys, I have used replace keyword instead of decoding, and is working as expected.

smacdonald2008
Level 10
February 6, 2019

I am happy to hear its working.