【发布时间】:2017-03-08 16:51:37
【问题描述】:
大多数类似的问题似乎与我遇到的问题相反。
我正在使用 @RestController 构建一个基于 Spring Boot 的 web 应用程序。 JSON 响应运行良好,但现在我想支持通过模板(特别是 Thymeleaf)返回 HTML。所有示例都显示了这样的构建方法:
@RequestMapping(method = RequestMethod.GET)
String index()
{
return "index";
}
只要它所在的类用 @Controller 注释就可以了。如果我用@RestController 进行注释,我会得到文字字符串“index”。这是有道理的,因为@RestController 意味着@ResponseBody。
总的来说,我对此有几个问题......
在旨在返回 JSON 的方法上使用
@Controller和显式@ResponseBody注释是否正确?我担心我的 Controller 类会变得非常大,因为我将为大多数 GET 方法提供两种实现(一种用于返回 HATEOAS JSON,一种用于返回模型中包含更多内容的 HTML )。是否有建议的做法来考虑这一点?
不胜感激。谢谢!
【问题讨论】:
-
您仍然可以将所有代码放在一个类中(或任何有意义的类),并使用该类作为委托人来实现 2 个控制器。你所有的方法都只包含delegate.callMethod()。或者,您可以定义一个抽象基类,而不是委托,将其扩展两次。你所有的方法都只会包含 super.callParentMethod()。在这两种情况下,控制器都只是带有映射定义的空壳。
标签: spring spring-mvc spring-boot spring-rest