【问题标题】:Controller or RestController控制器或 RestController
【发布时间】:2018-11-11 16:30:36
【问题描述】:

我是 jEE 的新手,这是我使用 spring 的第一个 jEE 代码。下面的代码工作正常。当我去我的本地主机时,他只是打印字符串索引;否则他打印处理错误。

我的问题是:如果我使用 @Controller 而不是 @RestController,为什么这段代码不再有效

我在 spring 的文档中找不到任何简单的解释,我希望有人能解释这一点。

我感觉如果没有 thymeleaf 之类的东西,单独的控制器就无法工作(我知道如果我使用的是 thymeleaf,字符串索引将被 ressources 文件夹中的索引页面替换),其中 RestController 可能会返回数据为xml 或 json 或其他。

谢谢

@RestController
public class HelloController implements ErrorController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping("/error")
    public String error() {
        return "gestion erreur";
    }


    @Override
    public String getErrorPath() {
        return "/error";
    }
}

【问题讨论】:

  • RestController 也是一个混合了 ResponseBody 注解的控制器。如果使用 Controller,请分享您遇到的错误类型。
  • 那不是 javaee 本身,而是 Spring。
  • 这可能会有所帮助:dzone.com/articles/…

标签: spring spring-mvc spring-boot


【解决方案1】:

@Controller 的工作是创建模型对象的 Map 并找到视图,但 @RestController 只是简单地返回对象,对象数据直接以 JSON 或 XML 的形式写入 HTTP 响应。

@Controller 是一个通用注解,用于将一个类标记为 Spring MVC 控制器,而 @RestController 是一个用于 RESTFul Web 服务的特殊控制器,相当于 @Controller + @ResponseBody。

如果您想要与@RestController 相同的功能而不使用它,您可以使用@Controller 和@ResponseBody。

@Controller
public class HelloController{

    @RequestMapping("/")
    @ResponseBody
    public String index() {
        return "index";
    }
}

【讨论】:

  • 谢谢,问题已解决。我当时就在想,但我不知道 ResponseBody。
猜你喜欢
  • 2021-05-24
  • 2018-01-31
  • 2020-07-08
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多