首页 > 其他分享 >【SpringMVC】基础入门实战(3)

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

时间:2024-11-11 18:18:43浏览次数:6  
标签:实战 返回 入门 index SpringMVC ResponseBody 设置 public RequestMapping

 8e19eee2be5648b78d93fbff2488137b.png

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

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

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

目录

一:实践

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;
    }

 (2)简洁方法获取 Header

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

 

运行结果

fiddler抓包验证 

2:返回静态页面

(1)返回静态页面失败

前端代码

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

</body>
</html>

后端代码

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

运行结果 

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

(2)Controller

我们需要把 @RestController 改为 @Controller
@Controller
public class IndexController {
 @RequestMapping("/index")
 public Object index(){
 return "/index.html";
 }
}

(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";
 }
}

①@ResponseBody 既是类注解, ⼜是⽅法注解 如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据 ②如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody 注 解, 也就是当前类下所有的⽅法返回值做为响应数据 ③如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把 @ResponseBody 注解添加到对应的⽅法上即可

4:返回HTML代码片段

后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析
@RequestMapping("/returnHtml")
@ResponseBody
public String returnHtml(){
    return "<h1>Hello,HTML~</h1>";
}

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

(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;
    }
通过Fiddler观察响应结果, Content-Type 为 application/json

6:设置状态码

Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码, 程序员也可以⼿动指定状态码 通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置 状态码不影响⻚⾯的展⽰
 @RequestMapping(value = "/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response){
        response.setStatus(401);
        return "设置状态码成功";
    }

7:设置Header

Http响应报头也会向客⼾端传递⼀些附加信息, ⽐如服务程序的名称,请求的资源已移动到新地址等, 如: Content-Type, Local等. 这些信息通过 @RequestMapping 注解的属性来实现 先来看 @RequestMapping 的源码

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}";//转义字符
    }

浏览器响应结果

postman测试

fiddler抓包

(2)设置响应编码

设置返回类型时, 也可以同步设置响应编码
@RequestMapping(value = "/returnJson3" ,
            produces = "application/json;charset = utf-8")
    @ResponseBody
    public String returnJson3(){
        return "{\"你大爷\":true}";//转义字符
    }

(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成功";

    }

标签:实战,返回,入门,index,SpringMVC,ResponseBody,设置,public,RequestMapping
From: https://blog.csdn.net/2301_80133875/article/details/143690200

相关文章

  • 书生大模型实战营第4期——2.5 XTuner 微调个人小助手认知
    文章目录1学习内容及任务2环境配置和数据准备2.1创建虚拟环境2.2安装XTuner2.3验证安装XTuner3修改提供的数据3.1创建文件夹存放微调数据3.2创建修改脚本3.3执行脚本并查看数据4训练启动4.1复制模型4.2修改Config4.3启动微调4.4权重转换4.5模型合并5......
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day10
    ###LAB19Innovus在线DRC检查这个章节的学习目标是学会使用数字IC后端设计实现PR工具innovus来检查drc。数字后端零基础入门系列|Innovus零基础LAB学习Day9数字后端零基础入门系列|Innovus零基础LAB学习Day8数字后端零基础入门系列|Innovus零基础LAB学习Day7首先......
  • LangGraph入门:构建ReACT架构的智能Agent
    引言在人工智能和大语言模型(LLM)快速发展的今天,如何构建高效、灵活的智能Agent成为了一个热门话题。LangGraph作为一个强大的工具,为我们提供了一种新的方式来实现复杂的AI工作流,特别是在构建ReACT(ReasoningandActing)架构的智能Agent方面表现出色。本文将深入探讨如何使用LangGra......
  • 基于ESP32的桌面小屏幕实战[3]:硬件设计之主控模块、墨水屏和TP、USB转串口、蜂鸣器、
    1.主控模块主控用的是ESP32-S。在立创商城搜索它,找到ESP32-S,复制编号。回到嘉立创EDA,用编号搜原件。把原件放置在原理图中。按照之前的外设接口说明接线。注意,给引脚命名的时候,要单击鼠标右键,点击属性,在名称处编辑。打开这个芯片的数据手册,找到外围设计原理图。参......
  • APP实战:某无*单词 实现直接获取VIP
    记一次修改dex文件实现破译某单词软件VIP(某无*单词)这是一个无壳的APP,可以通过MT管理器取查看所有的dex文件,或者通过Jadx去搜索'会员'很简单的判断VIP的语句,所以我们也只需要去看看代码的实现就可以了intpro=user.getPro();进入getPro()看到的是smali代码.methodpubl......
  • 漏洞挖掘实战教程—记录某次SRC引起的连锁漏洞挖掘,网络安全零基础入门到精通教程!
    前言最近这几篇文章一直在围绕学习干货板块去写了,个人的写作和总结能力也有了不小的提升,停笔一想,漏洞挖掘的实战咱们也不能含糊啊,哪怕是水洞,本次是某次SRC中的一个不起眼的资产,引起的多个漏洞,在文章的最后会归纳总结,不知道各位还记不记得之前画的思维导图虽然在往下更细......
  • 《ASP.Net Core技术内幕与项目实战》读书笔记_1
    ch1.NETCore入门.NET介绍这一章主要说的是.NetCore、.NetFramework、.NetStanard三个之间的关系。通俗来讲就是Core是新出的、能跨平台,Framwork是老版的、不能跨平台,Standard是为了在Framework、Core、Xamarin中统一库的使用而定制的规范,以便于开发出来的库可以在多个平......
  • AI全栈大模型项目实战(29套)人工智能视频课程-多模态大模型
    AI全栈大模型项目实战(29套)人工智能视频课程-多模态大模型29套AI全栈大模型项目实战,人工智能视频课程-多模态大模型,微调技术训练营,大模型多场景实战,AI图像处理,AI量化投资,OPenCV视觉处理,机器学习,Pytorch深度学习,推荐系统,自动驾驶,训练私有大模型,LLM大语言模型,大模型多场景实战,Agent智......
  • 最经典的黑客入门教程(安全必备技能)
    无论那类黑客,他们最初的学习内容都将是本部分所涉及的内容,而且掌握的基本技能也都是一样的。即便日后他们各自走上了不同的道路,但是所做的事情也差不多,只不过出发点和目的不一样而已第一节、黑客的种类和行为以我的理解,“黑客”大体上应该分为“正”、“邪”两类,正派黑客......
  • 渗透测试中登录框骚操作总结(非常详细)零基础入门到精通,收藏这一篇就够了
    由于测试过程中很多系统我们能接触到的只有一个登陆界面,所以要充分挖掘漏洞,进行深入操作登录注册万能密码绕过登录存在SQL注入的情况下,有可能使用万能密码直接登录admin'or'1'='1'--``admin'OR4=4/*``"or"a"="a``'or''='``'or1=1--有超级多登录口SQL......