【SpringMVC】基础入门实战(3)

简介: SpringMVC获取Header,返回静态页面,返回数据(Controller),返回数据@ResponseBody,返回HTML代码片段,返回JSON,设置状态码,设置Header

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:实践

1:获取header

(1)普通方法

(2)简洁方法获取 Header

2:返回静态页面

(1)返回静态页面失败

(2)Controller

(3)@RestController 和 @Controller关联

3:返回数据@ResponseBody

4:返回HTML代码片段

(1) Content-Type 常⻅取值

5:返回JSON

6:设置状态码

7:设置Header

(1)设置Content-Type

(2)设置响应编码

(3)设置其它Header


一:实践

1:获取header

(1)普通方法

使⽤HttpServletRequest 提供的getHeader⽅法来获取, 参数对应HTTP请求报头的"Key"

@RequestMapping("/param1")
    public String  param1(HttpServletRequest request , HttpServletResponse response){
        String userAgent = request.getHeader("User-Agent");
        return "userAgent "+  ":" + userAgent;
    }

image.gif

(2)简洁方法获取 Header

@RequestMapping("/param2")
    public String para2(@RequestHeader("User-Agent") String userAgent){
        return "userAgent "+  ":" + userAgent;
    }

image.gif

运行结果

image.gif 编辑

fiddler抓包验证

image.gif 编辑

2:返回静态页面

(1)返回静态页面失败

image.gif 编辑

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index页面</title>
</head>
<body>
Hello,Spring MVC,我是index页面
</body>
</html>

image.gif

后端代码

@RestController
public class IndexController {
 @RequestMapping("/index")
 public Object index(){
 //返回index.html
 return "/index.html";
 }
}

image.gif

运行结果

image.gif 编辑

结果却发现, ⻚⾯未正确返回, http响应把 "/index.html" 当做了http响应正⽂的数据

(2)Controller

我们需要把 @RestController 改为 @Controller

@Controller
public class IndexController {
 @RequestMapping("/index")
 public Object index(){
 return "/index.html";
 }
}

image.gif

image.gif 编辑

(3)@RestController @Controller关联

@RestController = @Controller + @ResponseBody

@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.

@ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息

如果想返回视图的话, 只需要把 @ResponseBody 去掉就可以了, 也就是 @Controller

3:返回数据@ResponseBody

加上 @ResponseBody 注解, 该⽅法就会把 "/index.html" 当做⼀个数据返回给前端

@Controller
@ResponseBody
public class IndexController {
 @RequestMapping("/index")
 public Object index(){
 return "/index.html";
 }
}

image.gif

image.gif 编辑

①@ResponseBody 既是类注解, ⼜是⽅法注解

如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据

②如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody

解, 也就是当前类下所有的⽅法返回值做为响应数据

③如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把 @ResponseBody 注解添加到对应的⽅法上即可

4:返回HTML代码片段

后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析

@RequestMapping("/returnHtml")
@ResponseBody
public String returnHtml(){
    return "<h1>Hello,HTML~</h1>";
}

image.gif

image.gif 编辑

通过Fiddler观察响应结果, Content-Type text/html

image.gif 编辑

(1) Content-Type 常⻅取值

text/html : body 数据格式是 HTML

text/css : body 数据格式是 CSS

application/javascript : body 数据格式是 JavaScript

application/json : body 数据格式是 JSON

如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为 application/javascript

如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css

5:返回JSON

@RequestMapping("/returnJson")
    @ResponseBody
    public HashMap<String,String> returnJson(){
        HashMap<String,String> hashmap = new HashMap<>();
        hashmap.put("张三","畏罪潜逃");
        hashmap.put("李四","知法犯法");
        hashmap.put("王五","不知悔改");
        return hashmap;
    }

image.gif

image.gif 编辑通过Fiddler观察响应结果, Content-Type application/json

image.gif 编辑

6:设置状态码

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

通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置

状态码不影响⻚⾯的展⽰

@RequestMapping(value = "/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response){
        response.setStatus(401);
        return "设置状态码成功";
    }

image.gif

image.gif 编辑

image.gif 编辑

7:设置Header

Http响应报头也会向客⼾端传递⼀些附加信息, ⽐如服务程序的名称,请求的资源已移动到新地址等, 如:

Content-Type, Local等.

这些信息通过 @RequestMapping 注解的属性来实现

先来看 @RequestMapping 的源码

image.gif 编辑

1. value: 指定映射的URL

2. method: 指定请求的method类型, 如GET, POST等

3. consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json,

text/html;

4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

5. Params: 指定request中必须包含某些参数值时,才让该⽅法处理

6. headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求

(1)设置Content-Type

我们通过设置 produces属性的值, 设置响应的报头Content-Type

@RequestMapping(value = "/returnJson2" , produces = "application/json")
    @ResponseBody
    public String returnJson2(){
        return "{\"success\":true}";//转义字符
    }

image.gif

浏览器响应结果

image.gif 编辑

postman测试

image.gif 编辑

fiddler抓包

image.gif 编辑

(2)设置响应编码

设置返回类型时, 也可以同步设置响应编码

@RequestMapping(value = "/returnJson3" ,
            produces = "application/json;charset = utf-8")
    @ResponseBody
    public String returnJson3(){
        return "{\"你大爷\":true}";//转义字符
    }

image.gif

image.gif 编辑

(3)设置其它Header

设置其他Header的话, 需要使⽤Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置

void setHeader(String name, String value) 设置⼀个带有给定的名称和值的 header. 如果 name

已经存在, 则覆盖旧的值

@RequestMapping("/setHeader")
    @ResponseBody
    public String setHeader(HttpServletResponse response){
        response.setHeader("柳贯一","boss");
        return "设置header成功";
    }

image.gif

image.gif 编辑

image.gif 编辑

相关文章
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
SpringMVC入门到实战------ 十一 拦截器的使用
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
SpringMVC入门到实战------ 十一 拦截器的使用
|
4月前
|
JSON 前端开发 JavaScript
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
这篇文章详细介绍了SpringMVC中的`HttpMessageConverter`接口及其相关的`@RequestBody`、`@ResponseBody`、`RequestEntity`和`ResponseEntity`注解和类型的使用,包括如何将请求体转换为Java对象、如何将Java对象转换为响应体、以及如何处理JSON和AJAX请求。
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
|
4月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
4月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
4月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
4月前
|
前端开发
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
这篇文章详细介绍了SpringMVC中的视图类型,包括ThymeleafView、转发视图、重定向视图和视图控制器的使用,以及如何通过源码查看确定使用的视图渲染器类型。
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
SpringMVC入门到实战------十二、异常处理器
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
|
4月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
4月前
|
JavaScript 数据安全/隐私保护
SpringMVC入门到实战------4、SpringMVC获取请求参数(六种方式详细说明)
这篇文章介绍了在Vue中如何使用过滤器来隐藏手机号和邮箱等字符串的中间部分内容,以提高隐私保护。文章展示了实现效果,并提供了实现过程的代码示例,包括HTML部分的绑定、data部分的数据定义和script部分的过滤器定义。文章还解释了过滤器的概念、语法和使用方式,并提供了一个外部链接供读者获取更加详细的过滤器知识。
SpringMVC入门到实战------4、SpringMVC获取请求参数(六种方式详细说明)