移动端小程序需要提供用户协议和隐私条款接口,需要返回相关的页面,输出 html 内容。印象中 spring 似乎要去掉 @ResponseBody 注解,然后返回字符串。

@Controller
public class MyController {
 
    @GetMapping("/userProtocol")
    public String userProtocol() {
        return "userProtocol"; // 假设你的模板文件名为 userProtocol.html
    }
}

然后就收到了 404 报错,百度了一下说是需要确保 HTML 文件放在正确的目录中。

查看了一下确实没有创建模板文件。按照返回的字符串名创建对应的模板文件,然后又报错 500 Internal Error:

Circular view path [userProtocol]: would dispatch back to the current handler URL [/xxx/common/userProtocol] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.

又百度了一下,好嘛,没有引入视图模板引擎。模板引擎有很多,这里以 thymeleaf 为例,添加依赖:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>3.3.0</version>
</dependency>

但这里只是提供一下接口(自己内部使用,主要是小程序强制要求),只需要简单返回 html 内容就好。所以干脆不要视图了,直接返回 html 字符串:

@RestController
public class MyController {
 
    @GetMapping("/userProtocol")
    public String userProtocol() {
//        return "userProtocol"; // 假设你的模板文件名为 userProtocol.html
        return "<html><body><h1>用户协议</h1></body></html>";
    }
}

测试 OK!