【问题标题】:How to return HTML page from RestController in Spring?如何在 Spring 中从 RestController 返回 HTML 页面?
【发布时间】:2021-05-30 02:42:40
【问题描述】:

我正在学习 Spring 和 Rest Web 服务,所以这让我有点困惑。 这是我的课:

RestController
@RequestMapping("/app-api/users")
public class UserApiController {

 @Autowired
 UserRepository userRepo;

 @GetMapping
 public Iterable<User> getUsers(){
    return userRepo.findAll();
  }   
}

现在,当我在某个休息客户端测试此 GET 请求时,我得到 HTTP status 200JSON 格式的所有用户。但是我怎样才能在HTML 中显示它们?我像普通控制器一样尝试过:

@GetMapping("/test")
public String getUsers(Model model) {
    Iterable<User> users = userRepo.findAll();
    model.addAttribute("users", users);

    return "test-user";
}

但这不起作用,因为它只是将test-user 作为常规文本返回。我的问题是处理来自RestController 的数据并在 html 中显示它们的正确方法和约定是什么?

【问题讨论】:

  • 您需要返回一个完整的 HTML 文档并将媒体类型设置为 text/html (@GetMapping("/test", produces = javax.ws.rs.core.MediaType.TEXT_HTML))
  • @Turing85 我收到 404 错误。
  • 您是否将正确的参数传递给 getUsers(Model mode) 方法?您是否访问了正确的 URL(app-api/users/test)?您是否面临浏览器或 restclient 中的 404 错误?

标签: java html spring spring-boot rest


【解决方案1】:

Spring Web 服务通常用于提供一个 API,该 API 提供原始数据供独立应用程序(例如 Angular、移动应用程序)使用,一开始可能会令人困惑。

如果您希望您的应用程序提供 HTML 页面,我建议您查看 ThymeLeaf 我想还有其他方法可以做同样的事情,但它是我知道的唯一一种。希望对您有所帮助,祝您有美好的一天!

【讨论】:

  • 我的项目中有 Thymeleaf,但仍然出现错误。我该怎么办?
【解决方案2】:

你的

@GetMapping("/test")
public String getUsers(Model model) {
  model.addAttribute("users", userRepo.findAll());
  return "test-user";
}

应该去@Controller注解的类(不是@RestController)。

@GetMapping
public Iterable<User> getUsers(){
  return userRepo.findAll();
}   

到另一个@RestController 班级。

这是两种不同的方法。
您使用 @Controller 使用模板引擎之一在服务器端形成 HTML 页面(如提到的 Thymeleaf)。
而 @RestController 用于 API 端点。您通常会使用 javascript 发出 ajax 请求并在客户端形成 HTML。

【讨论】:

  • 感谢回复,开发者通常是这样处理rest控制器的吗?要形成 HTML 页面,我们必须在客户端发出 ajax 请求?
  • Rest 控制器用于 API,其中 P 代表 Programming。您需要一些程序来请求休息控制器。这可能是 javascript ajax(通常用于构建 html)或任何其他程序。您可以使用两种方法中的一种或两种方法的混合。使用 rest 控制器和一些像 React.js 这样的 js 库/框架是更高级的技术,但是对于简单的东西使用普通的控制器和服务器端渲染是可以的。
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 2019-05-14
  • 2016-01-08
  • 2016-12-06
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多