ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@Controller/@RestController/@ResponseBody注解之间的联系

2021-07-18 12:02:36  阅读:180  来源: 互联网

标签:返回 RestController ResponseBody Controller 注解 页面


@Controller/@RestController/@ResponseBody注解之间的联系

1.@Controller

它用于标注控制器层,主要用来处理视图中的响应。他决定如何调用Model(模型)的实体Bean,如何调用业务层的数据增加、删除、修改和查询等业务操作,以及如何将结果返给视图进行渲染。

/**
 * @Controller注解标注控制器层,它是用来相应页面的,返回的时模板页面(比如:html页面)
 */
@Controller
public class HelloController {

    @RequestMapping("/test")
    public String sayHello(){
        return "hello";
    }
}

如果单独使用@Controller注解,启动Spring boot项目后,在地址栏输入:localhost:8080/test,会报以下错误提示:

2021-07-17 18:09:17.632 ERROR 8968 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "hello": Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers

错误解析模板[hello],模板可能不存在,或者无法被任何已配置的模板解析器访问。出现这个问题在于:没有使用静态模板页面,也就是静态资源下没有hello命名的静态页面,即@Controller注解是用来响应页面的。

工程结构:

在这里插入图片描述

hello.html页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>

在创建号静态页面后,再次启动Spring boot项目后,在地址栏输入:localhost:8080/test,结果如下:

在这里插入图片描述

2.@ResponseBody

它的作用是通过转换器将控制器中方法返回的对象转换为指定的格式,然后写入Response对象的body区。他常用来返回JSON/XML格式的数据。

注意:使用此注解后,数据直接写入输入流,不需要进行视图渲染

通常@ResponseBody注解和@Controller一起使用

/**
 * @Controller注解标注控制器层,它是用来相应页面的,返回的时模板页面(比如:html页面)
 */
@Controller
//@ResponseBody
public class HelloController {

    @ResponseBody
    @GetMapping("/test2")
    public String sayHello2(){
        return "hello2";
    }
}

在方法上加上@ResponseBody注解后,启动Springboot项目,在地址栏输入:localhost:8080/test2,结果如下:

在这里插入图片描述

注意:@ResponseBody注解可以写在类上也能写在方法上,写在类上是作用在类中所有的方法,写在某一个方法上则是只作用在这个方法上。

3.@RestController

它用于返回JSON(JavaScript Object Notation,JS对象简谱)、XML(eXtensible Markup Language)等数据,但不能返回HTML(HyperText Markup Language)页面。相当于@ResponseBody和注解@Controller合在一起的作用。

/**
 * @RestController注解用于返回JSON,XML等数据(可以理解为返回的是字符串或别的数据)
 * @RestController=@Controller+@ResponseBody
 */
@RestController
public class HelloController {

    @RequestMapping("/test")
    public String sayHello(){
        return "hello";
    }
}

在方法上加上@RestController注解后,启动Springboot项目,在地址栏输入:localhost:8080/test,结果如下:

在这里插入图片描述

总结:

@Controller注解标注控制器层,他是用来响应页面的,返回的是模型页面(比如:html页面)

@RestController注解是用于返回JSON,XML等数据的(可以理解为返回的是字符串或别的数据)

@Controller注解标注控制器层,他是用来响应页面的,返回的是模型页面(比如:html页面)

@RestController注解是用于返回JSON,XML等数据的(可以理解为返回的是字符串或别的数据)

@RestController=@Controller+@ResponseBody

标签:返回,RestController,ResponseBody,Controller,注解,页面
来源: https://blog.csdn.net/weixin_48539501/article/details/118875101

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有