我尝试从Ajax请求中调用Spring Boot控制器:
$('#female').click(function(){
$('#analysisTable').DataTable( {
"ajax": '/analyse/female'
});
});
其背后的想法是将列表加载到js数据表中。 控制器看起来像:
@GetMapping("/analyse/female")
public List<GenderAnalysis> analysisByFemale(final Model model) {
final List<GenderAnalysis> result = analyseDao.getAnalysisByGender(AnalyseDAO.Gender.Female);
return result;
}
控制器工作正常。但我收到Thymeleaf模板错误。 每个响应都将通过ThymeleafLayoutInterceptor处理,并将“正常”(不是ajax)请求加载到模板中。
erorr如下:
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/analyse/female.html]")
我知道这里没有female.html资源,我什至没有。只需将原始列表提供给ajax调用即可。
即使使用模板,我也不知道如何使用Spring Boot + Thymeleaf + Ajax。 拦截器可能有处理问题吗?我能做什么?有人能帮忙吗?
答案 0 :(得分:1)
如果要返回JSON而不是Thymeleaf模板,则应该:
1)将控制器声明为@RestController
,而不只是@Controller
。这将影响控制器类上的所有@GetMapping
,@PostMapping
和@RequestMapping
注释。
或
2)除了@ResponseBody
之外,还将该方法声明为@GetMapping
。
@GetMapping("/analyse/female")
@ResponseBody
public List<GenderAnalysis> analysisByFemale() {
return analyseDao.getAnalysisByGender(AnalyseDAO.Gender.Female);
}