Spring Boot中如何将RestController改为支持Thymeleaf渲染和POST请求的Controller
问题描述
我近期刚开始学习Spring Boot,目前遇到问题无法推进,完整项目的GitHub地址为https://github.com/Timmy1505/springbooy-app.git。我现有一个RestController,想要将其修改为普通Controller,实现渲染Thymeleaf的registration_form模板,同时支持POST请求提交,原有代码如下:
@RestController @RequestMapping(path = "api/v1/registration") @AllArgsConstructor public class RegistrationController { private final RegistrationService registrationService; @PostMapping public String register(@RequestBody RegistrationRequest request) { return registrationService.register(request); } @GetMapping(path = "confirm") public String confirm(@RequestParam("token") String token) { return registrationService.confirmToken(token); } }
解决方法
核心修改步骤如下:
- 把类上的
@RestController注解替换为@Controller:@RestController默认会把所有方法的返回值作为响应体返回,不会走视图解析器,只有@Controller才能支持返回视图名渲染Thymeleaf模板 - 新增GET类型的接口,方法直接返回Thymeleaf模板名
registration_form,用于访问时渲染注册页面 - 原有POST提交接口去掉
@RequestBody注解:表单提交的格式为application/x-www-form-urlencoded,无需该注解解析JSON,直接用实体类接收参数即可 - 原有confirm校验token的接口需要单独加
@ResponseBody注解,保证返回的是字符串而不是视图名
修改后完整代码如下:
@Controller @RequestMapping(path = "api/v1/registration") @AllArgsConstructor public class RegistrationController { private final RegistrationService registrationService; // 渲染注册表单页面 @GetMapping public String showRegistrationForm() { return "registration_form"; } // 接收表单提交的注册数据 @PostMapping public String register(RegistrationRequest request) { registrationService.register(request); // 注册成功后可按需调整返回的视图名,也可以设置重定向到其他页面 return "register_success"; } // 加@ResponseBody保证返回的是校验结果字符串,不会被解析为视图 @GetMapping(path = "confirm") @ResponseBody public String confirm(@RequestParam("token") String token) { return registrationService.confirmToken(token); } }
注意:请确保项目已经引入Thymeleaf starter依赖,且
registration_form.html模板文件存放在resources/templates目录下,否则会出现视图找不到的404错误。
内容的提问来源于stack exchange,提问作者timmy tembo
相关产品推荐
相关产品推荐

