IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 接收请求体和请求行,设置响应体 -> 正文阅读

[Java知识库]接收请求体和请求行,设置响应体

1.将请求体或者请求头转为java对象(String)

@RequestBody 获取请求体(只有post请求才有请求体)

<form th:action="@{/testRequestBody}" method="post">
? ? 用户名:<input type="text" name="username"><br>
? ? 密码:<input type="password" name="password"><br>
? ? <input type="submit">
</form>
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String requestBody){
    System.out.println("requestBody:"+requestBody);
    return "success";
}

输出:

@RequestEntity 获取请求体和请求头

    @RequestMapping("/test_requestentity_post") //查看post请求的整个请求报文
//    注意rRequestEntity后面一定要写泛型,<string>
//    否则,请求头中设置数据格式的Content-Type会使用默认的 application/x-www-form-urlencoded,报415错误
//    post请求会报错,get因为没有请求体,不报错 ,ajax好像可以专门设置请求的编码
    public String test_requestentity_post(RequestEntity<String> requestentity)
    {
        System.out.println(requestentity.getHeaders());
        System.out.println(requestentity.getBody());
        return "success";
    }

<form th:action="@{/test_requestentity_post}" method="post">
    <input type="text" name="uname">
    <input type="text" name="pwd">
    <input type="submit" value="提交查看post的请求头和请求体">
</form>

输出:

?2.设置响应体

原生的servlet

浏览器收到响应体之后,不管响应体是什么(可能是一个页面,可能是一个字符串),都直接作出响应,请求一个页面比如"success",页面经过thymeleaf解析之后的html内容,作为响应体响应。

    @RequestMapping("/test_serlvet")
// 返回值设置为null ,页面依旧会跳转,跳转到请求的地址  <form th:action="@{/test_serlvet}" method="post">跳转到:
// http://localhost:8080/Springmvc_demo4/test_serlvet  不报错
    public String test_serlvet(HttpServletResponse response) throws IOException {
       PrintWriter out= response.getWriter();
//        浏览器收到响应体后,不管响应体是什么(可能是一个页面,可能是一个字符串),都直接进行显示
// 正常返回一个页面,比如"success',页面经过thymeleaf解析之后,作为响应体响应
// 这是在响应体中添加了一个字符串success,浏览器收到响应体,将响应体显示,并不是直接在浏览器中输出了success
       out.println("success123");
        return "sucess";
    }

响应一个类(只这样写会报错,http是存在于浏览器和服务器之间的第三方协议,无法直接解析java中的类,只能传输字符串或者json格式)

接收user参数是 springmvc在处理请求时,将json格式的参数填到user类中,不是直接传输user类

?return user 就是错的,浏览器不能解析java类

    @RequestMapping("/test_responseBody_user")
    @ResponseBody
    //会报错,不能直接响应一个类
    public User test_responseBody_user(User user) {
        System.out.println(user);
        return user;
    }

解决方式:

1.导入这个依赖,可以自动将java的类转为json格式的字符串 ,

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>
2.开启mvc的注解驱动(在处理静态资源时开启过)
???????<mvc:annotation-driven />

浏览器显示结果:
{"uname":"123","pwd":"123"}

处理ajax请求

因为ajax是请求不刷新页面,所以不能进行页面的跳转,如下,是一个ajax请求

div id="app">
    <a @click="testAxios" th:href="@{/testAxios}">springmvc处理ajax</a>
</div>
<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}"></script>
<script type="text/javascript">
    new Vue({
        el:"#app",
        methods:{
            testAxios:function (event) {
                axios({
                    method:"post",
                    url:event.target.href,
                    params:{
                        username:"admin",
                        password:"123456"
                    }
                }).then(function (response) {
                    alert(response.data);
                });
                event.preventDefault();
            }
        }
    });
</script>

如果,我在控制类中写如下代码,强行让ajax请求返回一个页面

    @RequestMapping("/testAxios")
    public String testAxios(String username, String password){
        System.out.println(username+","+password);
        return "success";
    }

他会直接输出success页面的所有内容(ajax的回调函数写了alert),如果没写回调函数,就什么都不会发生

在控制器类中加入@responseBody给ajax页面的回调函数传递参数

    @RequestMapping("/testAxios")
    @ResponseBody
    public String testAxios(String username, String password){
        System.out.println(username+","+password);
        return "hello ,i am spring MVC go back";
    }

?

?控制器类接收ajax的请求参数和接收post请求 get请求是一样的,可以直接用属性接收,或者用类接收,或者接收多个同名参数,或者用request接收,如上

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:04:09  更:2022-05-05 11:05:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:42:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码