为了解决这个问题,我首先开发了一个新的视图接口实现。此实现将用于将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对象中使用模板的名称。