在 Spring Boot 中有条件地从 @RestController 返回 JSON 和 (HTML) 模板

Ric*_*ick 5 spring spring-mvc spring-boot spring-rest

大多数类似的问题似乎都有与我\xe2\x80\x99m 相反的问题。

\n\n

I\xe2\x80\x99m 使用以下命令构建基于 Spring Boot 的 Web 应用程序@RestController. JSON 响应运行良好,但现在我想支持通过模板(特别是 Thymeleaf)返回 HTML。所有示例都显示了这样的构建方法:

\n\n
@RequestMapping(method = RequestMethod.GET)\nString index()\n{\n    return "index";\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

只要 it\xe2\x80\x99s 中的类用@Controller. 如果我用 进行注释@RestController,我会得到文字字符串“index”。这是有道理的,因为@RestController意味着@ResponseBody.

\n\n

我对此有一些一般性的问题\xe2\x80\xa6

\n\n
    \n
  • @Controller使用和明确的做法是否正确@ResponseBody在旨在返回 JSON 的方法上

  • \n
  • 我担心我的 Controller 类会变得相当大,因为我\xe2\x80\x99ll 对大多数 GET 方法有两种实现(一种返回 HATEOAS JSON,一种返回模型中包含更多内容的 HTML)。是否有推荐的做法来分解这个?

  • \n
\n\n

感谢您的建议。谢谢!

\n

Mac*_*iak 4

\n

在旨在返回 JSON 的方法上使用 @Controller 和显式 @ResponseBody 注释是否正确?

\n
\n\n

只要您的控制器很小并且只包含很少的方法即可。

\n\n
\n

我担心我的 Controller 类会变得相当大,因为我\xe2\x80\x99ll 对大多数 GET 方法有两种实现(一种返回 HATEOAS JSON,一种返回模型中包含更多内容的 HTML)。是否有推荐的做法来分解这个?

\n
\n\n

如果它们长大并变得难以阅读,则将其拆分为一个@Controller返回的 HTML 页面,然后@RestController一个返回 JSON 页面。

\n\n

总结一下,注重可读性。从技术上讲,这两种方法都是正确的。

\n