Spring MVC -- 响应

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

3.响应

3.1 返回静态页面

在这里插入图片描述

静态html页面一般放在static目录底下,访问路径是以static文件为根目录

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
  </head>
  <body>
    <h1>我是页面</h1>
  </body>
</html>

在这里插入图片描述

那么后端如何接收以后请求返回一个页面呢?

直接这样行吗?

@RestController
@RequestMapping("/response")
public class ResponseController {
    @RequestMapping("/getIndex")
    public String getIndex() {
        return "index.html";
    }
}

我们来看看请求返回结果:
在这里插入图片描述

直接是以字符串的形式返回了

正确的做法是,我们需要将RestController改为Controller,以及将"index"改为"/index"

@Controller
@RequestMapping("/response")
public class ResponseController {
    @RequestMapping("/getIndex")
    public String getIndex() {
        return "/index.html";
    }

在这里插入图片描述

对于上述两个改动的解释:

  1. “index"改为”/index"

如果加上"/“,那么此时的路径就是"staitc/index”;如果没有"/“,那么此时的路径就是类路径加上文件名,即"static/response/index.html”

  1. 将RestController改为Controller

如果使用的是RestController,我们来看看结果:

在这里插入图片描述

此时就是直接返回字符串格式

这就是二者的区别

@RestController 返回数据,@Controller返回视图

实际上,我们看看@RestController的实现:

在这里插入图片描述

不难发现,@RestController = @Controller + @ResponseBody

我们在之前说过,加上@RestController 表示这个类交给Spring管理,实际上是@Controller起的作用

而@ResponseBody起到返回数据的作用,@Controller起到返回视图的作用

如果运行这样的程序:
@Controller
//@RestController
@RequestMapping("/response")
public class ResponseController {
    @RequestMapping("/getIndex")
    public String getIndex() {
        return "index.html";
    }

    @RequestMapping("getData")
    public String getData() {
        return "返回数据";
    }

访问getData就会发现报错

在这里插入图片描述

因为加上了Controller注解,默认返回视图,而"返回数据"不是一个正确的路径

那么我们使用ResponseBody注解即可

在这里插入图片描述

在这里插入图片描述

或者可以修饰类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以发现,此时就默认全部返回数据了

3.2 返回HTML代码片段

后端返回数据的时候,如果数据里面有HTML代码,就会被浏览器解析

在这里插入图片描述

3.3 返回JSON

@ResponseBody
@RequestMapping("getJSON")
public UserInfo getJSON() {
    UserInfo userInfo = new UserInfo(20,"wcb");
    return userInfo;
}

在这里插入图片描述

使用FIddler抓包:

在这里插入图片描述

即如果返回的是对象,会自动转为JSON

3.4 设置状态码

Spring MVC会根据我们方法的返回值结果自动响应设置状态码,程序员也可以手动指定状态码

@ResponseBody
@RequestMapping("setStatus")
public String setStatus(HttpServletResponse response) {
    response.setStatus(401);
    return "设置成功";
}

访问后使用Fiddler抓包

在这里插入图片描述

设置状态码是不影响响应结果的

3.5 设置Header

设置Header中的信息通过注解@RequestMapping实现

我们先来看@RequestMapping的源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective({ControllerMappingReflectiveProcessor.class})
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/path:指定映射的URL
  • mathod:指定请求的method类型.如GET//POST
  • Params:指定request中必须包含某些参数值时,才让这个方法处理
  • headers:指定request中必须包含某些特定的header值,才能让该方法处理请求
  • consumes:指定处理request的提交类型(Content-Type),例如application/json…
  • produces:指定返回的内容类型,仅当request请求头中的类型中包含该指定类型才返回

设置Content-Type

@ResponseBody
@RequestMapping(value = "/setContent-Type",produces = "application/json")
public String setContentType() {
    return "{\"status\":200}";
}

在这里插入图片描述

同时也可以设置响应编码

@ResponseBody
@RequestMapping(value = "/setContent-Type",produces = "application/json;charset=UTF-8")
public String setContentType() {
    return "{\"status\":200}";
}

在这里插入图片描述

设置其他Header

需要使用Spring MVC中的HttpServletResponse实现

@ResponseBody
@RequestMapping("/setHeader")
public String setHeader(HttpServletResponse response) {
    response.setHeader("MyHeader","MyHeaderValue");
    return "设置成功";
}

在这里插入图片描述

感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码

相关推荐

  1. SpringMVC之处理响应

    2024-07-20 22:14:02       51 阅读
  2. SpringMVC-响应数据

    2024-07-20 22:14:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 22:14:02       103 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 22:14:02       114 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 22:14:02       93 阅读
  4. Python语言-面向对象

    2024-07-20 22:14:02       99 阅读

热门阅读

  1. SharedPreferences 和 MMKV 是何方神圣

    2024-07-20 22:14:02       24 阅读
  2. 力扣1942.最小未被占据椅子的编号

    2024-07-20 22:14:02       23 阅读
  3. linux LED代码设计

    2024-07-20 22:14:02       27 阅读
  4. 【深度学习图像】拼接图的切分

    2024-07-20 22:14:02       25 阅读
  5. dp算法第三天(暑期提升)

    2024-07-20 22:14:02       28 阅读
  6. RabbitMQ 全面解析与常见问题解答

    2024-07-20 22:14:02       26 阅读
  7. 关于大数据技术栈的一些总结

    2024-07-20 22:14:02       25 阅读
  8. 酒茶元宇宙:探索科技与传统文化的融合

    2024-07-20 22:14:02       22 阅读
  9. 移动支付行业现状及其特点

    2024-07-20 22:14:02       26 阅读
  10. Kubernetes v1.30:只读卷挂载可以实现只读了

    2024-07-20 22:14:02       25 阅读
  11. Unity运行时节点编辑器——互动电影案例

    2024-07-20 22:14:02       21 阅读
  12. flask渲染页码

    2024-07-20 22:14:02       21 阅读