当前位置: 首页 > news >正文

@Controller和@RestController的区别?

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

例如:

1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面

若返回json等内容到页面,则需要加@ResponseBody注解

@CrossOrigin
@Controller
public class FileUploadController {

//跳转到上传文件的页面
@RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
public String goUploadImg() {
//跳转到 templates 目录下的 uploadimg.html
return "uploadimg";
}

//处理文件上传
@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,
HttpServletRequest request) {
System.out.println("调用文件上传方法");
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();

 

 2.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

@CrossOrigin
@RestController /* @Controller + @ResponseBody*/
public class HospitalController {

    //注入Service服务对象
    @Autowired
    private HospitalService hospitalService;

    /**
     * 查询所有医院信息(未分页)
     */

    @RequestMapping(value = "findAllHospital",method = RequestMethod.GET)
    public  List<Hospital> findAllHospital(){
        List<Hospital> hospitalList= hospitalService.findAllHospital();
        return hospitalList;
    }

 

 

相关文章:

  • 判断两个单链表是否相交
  • HBASE分布式数据库
  • Java 的类加载机制
  • K-means算法
  • 如何管理自己的情绪
  • 记录win10装jdk
  • 按照开发阶段划分测试技术
  • 数据倾斜
  • Tomcat9启动乱码
  • @GetMapping和@RequestMapping的区别
  • 正则表达式-匹配A和B之间字符串
  • HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
  • urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)
  • Mac下Chromedriver存放位置
  • 解决 Cannot open pip-script.py
  • [数据结构]链表的实现在PHP中
  • 03Go 类型总结
  • FineReport中如何实现自动滚屏效果
  • javascript 总结(常用工具类的封装)
  • Js基础知识(一) - 变量
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • maya建模与骨骼动画快速实现人工鱼
  • React 快速上手 - 07 前端路由 react-router
  • Service Worker
  • spring学习第二天
  • vue的全局变量和全局拦截请求器
  • 规范化安全开发 KOA 手脚架
  • 普通函数和构造函数的区别
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 算法-插入排序
  • postgresql行列转换函数
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #define,static,const,三种常量的区别
  • #vue3 实现前端下载excel文件模板功能
  • ()、[]、{}、(())、[[]]命令替换
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计大学生兼职系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET 事件模型教程(二)
  • .Net的DataSet直接与SQL2005交互
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET关于 跳过SSL中遇到的问题
  • /proc/stat文件详解(翻译)
  • @ModelAttribute使用详解
  • [] 与 [[]], -gt 与 > 的比较
  • [100天算法】-x 的平方根(day 61)
  • [android] 练习PopupWindow实现对话框
  • [Android]使用Git将项目提交到GitHub
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [CentOs7]图形界面
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解