Я пишу приложение 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("•");
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));
}