【问题标题】:Use Spring @RestController without implicit @RequestBody使用没有隐式 @RequestBody 的 Spring @RestController
【发布时间】:2018-01-26 15:42:25
【问题描述】:

我的控制器如下所示:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class MainController
{
    @GetMapping("/test")
    public String test()
    {
        return "test";
    }
}

我返回的“test”-String 是应该被处理的 Thymeleaf 模板的文件名。相反,当我访问该页面时,只会显示“测试”。我读过@RestController 在其所有映射上隐含地执行@ResponseBody。但是我该如何防止呢?还是我应该简单地使用@Controller

【问题讨论】:

  • 不确定您所说的“在其所有映射上都执行@ResponseBody”是什么意思。如果您希望它处理您的 thymleaf 模板,您应该使用 @ResponseBody
  • @pvpkiran 我应该如何处理带有@ResponseBody 的Thymeleaf 模板?当我只使用常规的@Controller 时,上面的代码完美运行(在资源/模板中搜索“test.html”并使用百里香处理它)

标签: spring spring-boot controller spring-webflux


【解决方案1】:

您是正确的@RestController 将始终在方法上产生ResponseBody。您需要使用标准 @Controller 来返回模板或视图。
@RestController 专门设计用于 RESTful Web 应用程序,@Controller 用于 MVC Web 应用程序。

【讨论】:

    【解决方案2】:

    @RestController

    这个注解是处理webservices的,都是关于数据的,HTML之类的表示标记在这里没有任何作用。

    @控制器

    如果涉及view,则此注释是您要使用的。 view 可以是任何会吐出html 的东西(有或没有插入model)。您可以使用优秀的 JSP、JSF 或模板引擎,如 freemarker、thymeleaf、velocity 等作为view

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2018-03-18
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多