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

Spring Web MVC(2)

响应
Http响应的结果可以是数据也可以是静态页面可以针对响应设置状态码 Header信息

返回静态页面注解@RestController和@Controller

我们创建一个前端页面
在这里插入图片描述

在这里插入图片描述

package com.example.demo.demos.web.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ReturnController {@RequestMapping("index")public Object index(){return "index.html";}
}

当我们发起请求时发现页面返回的是一个字符串而不是刚刚的html静态界面
在这里插入图片描述
这时我们需要把注解@RestController 改成 注解@Controller就能正确返回想要显示的静态界面了
在这里插入图片描述
@Responsebody返回数据:定义返回的数据格式为⾮视图,返回⼀个text/html信息
@Controlle返回试图:定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理
@RestController=@Controlle+@Responsebody
但是随着MVC的概念发生变化View不再返回视图而是返回显示试图时需要的数据
我们可以查看@RestController的源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}

其中这三个是元注解

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
@Documented

@Target这个注解的作用是表示注解修饰的对象
@Retention表示注解的生命周期
@Documented表示在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

@Controller
@ResponseBody

这表示注解@RestController由这两个注解组成

返回数据注解@ResponseBody
可以修饰类也可以修饰方法
修饰类的时候表示这个类下的所有方法返回的都是数据
修饰方法时表示该方法返回的是数据

@RequestMapping("/return")
@Controller
public class ReturnController {@RequestMapping("/index")public Object index(){return "index.html";}@RequestMapping("/returnData")@ResponseBodypublic String returnData(){return "返回数据";}}

在这里插入图片描述
也可以返回Html片段

@RequestMapping("/return")
@Controller
public class ReturnController {@RequestMapping("/index")public Object index(){return "index.html";}@RequestMapping("/returnData")@ResponseBodypublic String returnData(){return "返回数据";}@RequestMapping("/returnHtml")@ResponseBodypublic String returnHtml(){return "<h1>返回Html代码片段<h1>";}}

在这里插入图片描述
返回JSON
当我们返回接口的是String是conten-Type就是text/html
当我们返回接口时对象时这个注解就会自动设置为application/json Map

@RequestMapping("/returnJson")@ResponseBodypublic Person returnJson(){Person person = new Person();person.setAge(18);person.setId(2021);person.setName("张三");return person;}
@RequestMapping("returnMap")@ResponseBodypublic Map<String,String> returnMap(){Map<String,String> kv = new HashMap<>();kv.put("k1","k1");kv.put("k2","k2");kv.put("k3","k3");return kv;}

在这里插入图片描述
可以看到回自动定义为json格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置状态码

@RequestMapping("setStatus")@ResponseBodypublic String setStatus(HttpServletResponse response){response.setStatus(401);return "设置状态码";}

通常是200但是这里设置为401
状态码不影响页面显示
在这里插入图片描述

在这里插入图片描述
设置Header
我们可以通过@RequestMapping注解来实现http报头传递一些附加信息
比如

我们查看@RequestMapping的源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};
}

value: 指定映射的URL method:指定请求的method类型,如GET,POST等
consumes:指定处理请求(request)的提交内容类型(Content-Type),例如application/json,
text/html; produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
Params:设置request(响应)中必须包含某些参数值时,才让该⽅法处理
headers:
指定request中必须包含某些指定的header值,才能让该⽅法处理请求

设置其他Header

@RequestMapping(value = "/r1" , produces = "application/json;charset=utf-8")@ResponseBodypublic String r1(HttpServletResponse response){//设置headerresponse.setHeader("myhead","myhead");return "{'OK':1}";}

在这里插入图片描述
在这里插入图片描述

相关文章:

  • day16二叉树part03 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
  • 应用程序图标提取
  • Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)
  • 卡码网笔试 | 118 小y删数字、119 小红的字符串切割、120 小红的数字匹配
  • 如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!
  • Crontab 自动脚本实例 | 校园网保持联网
  • 宝石收集,tarjan
  • 佩戴安全头盔监测识别摄像机
  • 15 VUE学习:插槽slot
  • leetcode刷题
  • 数据库连接项目
  • 池的概念以及数据库连接池 Druid
  • 深入理解 Mysql 分层架构:从存储引擎到查询优化器的内部机制解析
  • 1738. 找出第 K 大的异或坐标值
  • 嵌入式进阶——舵机控制PWM
  • CSS 专业技巧
  • Elasticsearch 参考指南(升级前重新索引)
  • idea + plantuml 画流程图
  • JAVA SE 6 GC调优笔记
  • MySQL-事务管理(基础)
  • Mysql优化
  • Ruby 2.x 源代码分析:扩展 概述
  • 漂亮刷新控件-iOS
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 我的业余项目总结
  • 我是如何设计 Upload 上传组件的
  • 小程序 setData 学问多
  • 怎么将电脑中的声音录制成WAV格式
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (pytorch进阶之路)扩散概率模型
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (力扣)1314.矩阵区域和
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (七)Flink Watermark
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (五)关系数据库标准语言SQL
  • (一)SpringBoot3---尚硅谷总结
  • (转载)Linux 多线程条件变量同步
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Memory Profiler的使用举例
  • .NET MVC第三章、三种传值方式
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .net中调用windows performance记录性能信息
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @Resource和@Autowired的区别
  • @selector(..)警告提示
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20150904]exp slow.txt
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素