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

@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注解是用来响应页面的。

工程结构:

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

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,结果如下:

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

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,结果如下:

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

注意:@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/@RestController/@ResponseBody注解之间的联系

总结:

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

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

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

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

@RestController=@Controller+@ResponseBody

上一篇:maven无法下载jar解决


下一篇:18.@RestController