Преобразование символов UNICODE в HTML-сущность в строке JSON, возвращаемой через Spring MVC @ResponseBody - PullRequest
0 голосов
/ 24 апреля 2019

Я пишу приложение Spring MVC, в котором я выполняю AJAX-вызов из JSP, который возвращает строку JSON.Некоторый текст в строке JSON будет содержать специальные символы, например:

Символ маркера с Unicode 8226 или знаки пунктуации, такие как Apostrophe (Quote) с Unicode 8217

В моем JSP, когда я заполняюсьТекстовые области с такими символами обычно сохраняют свою первоначальную форму и хорошо отображаются.Тем не менее, я использую Datatables Editor в некоторых частях моего приложения, и вышеуказанные символы отображаются как?(знак вопроса) в сетке.

Я полагаю, что решением было бы преобразовать символы Юникода в объекты HTML при формировании строки JSON.Например, в контроллере, если я сканирую строку на наличие 8226 символов и заменяю ее на • и отправляю эту строку JSON в сетку Datatables, тогда я могу правильно видеть символы маркера.

MyВопрос в том, существует ли способ в Spring MVC или других инструментах обнаруживать присутствие символов Юникода больше 256 и заменять их сущностями HTML во время возврата строки JSON? Существует много вызовов AJAX, которыевернуть строку JSON в моём приложении, и было бы неплохо вызвать инструменты преобразования в каждом методе @RequestMapping.Я думал, может ли быть Spring перехватчик, который мог бы сделать это преобразование.Или в ContentNegotiatingViewResolver есть какие-то стратегии, чтобы позаботиться об этом преобразовании?

Любая помощь приветствуется.

Вот отображение, которое у меня есть в моем @RestController:

@RequestMapping(value = "/trips/{projectId}", method = RequestMethod.GET)
    public String getProjectTrips(@PathVariable BigInteger projectId) throws IOException {
        return projectTripReportGridService.getGridData(projectId);
    }

и метод projectTripReportGridService.getGridData:

public String getGridData(BigInteger projectId) throws IOException {

        List<ProjectTripReport> entityViews;

        entityViews = projectTripReportRepo.findAllByProjectId(projectId);

        for (ProjectTripReport si : entityViews) {
            if(si.getTripReport().indexOf(8226) > 0){
                StringBuilder sb = new StringBuilder();
                String tempReport = "";
                String wholeString = si.getTripReport();
                while(wholeString.indexOf(8226) > 0){
                    tempReport = wholeString.substring(0, wholeString.indexOf(8226));
                    sb.append(tempReport);
                    sb.append("&bull;");
                    wholeString = wholeString.substring(wholeString.indexOf(8226) + 1);
                }
                sb.append(wholeString);
                si.setTripReport(sb.toString());
            }
}
Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy[]{new OneToManyExclusionStrategy(), new JpaExclusionStrategy()}).create();
return gson.toJson(gson.toJsonTree(entityViews));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...