Чтобы решить эту проблему, сначала я разработал новую реализацию интерфейса View.Эта реализация будет использоваться для возврата HTML-кода клиенту:
public class HtmlView implements View {
private String src;
public HtmlView(String htmlContent) {
this.src = htmlContent;
}
@Override
public String getContentType() {
return MediaType.TEXT_HTML_VALUE;
}
@Override
public void render(Map<String, ?> map, HttpServletRequest httpServletRequest, HttpServletResponse response) throws Exception {
response.setContentType(getContentType());
response.getWriter().append(src);
}
}
Затем я обновил свой контроллер для возврата ModelAndView:
@PostMapping(value = "/payment3ds/{offerId}/{company}")
public ModelAndView payment3dsPost(...) {
try {
String htmlContent = "<html></html>";
View view = new HtmlView(htmlContent);
modelAndView.setView(view);
return modelAndView;
} catch (IllegalArgumentException e) {
Offer plan = subscriptionPlanRepo.findOneByIdAndCompanyName(Long.valueOf(offerId), companyName);
Company company = companyRepo.findByName(companyName);
// Add your data in model
Map<String, Object> model = modelAndView.getModel();
modelAndView.setViewName("payment3ds"); // thymeleaf template
return modelAndView;
}
}
Если я хочу вернуть HTML-код, я используюHtmlView, в противном случае я использую имя шаблона в объекте ModelAndView.