• 8.SpringMVC处理ajax请求


    目录

    一:@RequestBody

    二:@RequestBody获取json格式的请求参数

    三:@ResponseBody

    四:@ResponseBody响应浏览器json数据

    五:@RestController注解

    准备工作:

    ①创建maven工程

    ②添加相关依赖,和添加web模块

    ③配置web.xml,如配置处理1.编码过滤器,2.请求方式的过滤器,3.前端控制器

    ④创建springmvc.xml,并进行配置

    ⑤创建控制层controller

    一:@RequestBody

    index.html 


          axios({
                url:"",//请求路径
                method:"",//请求方式
                //以name=value&name=value的方式发送的请求参数
                //不管使用的请求方式是get或post,请求参数都会被拼接到请求地址后
                //此种方式的请求参数可以通过request.getParameter()获取
                params:{},
                //以json格式发送的请求参数
                //请求参数会被保存到请求报文的请求体传输到服务器
                //此种方式的请求参数不可以通过request.getParameter()获取
                data:{}
           }).then(response=>{
                console.log(response.data);
           });

    1. <div id="app">
    2. <h1>index.htmlh1>
    3. <input type="button" value="测试SpringMVC处理ajax" @click="testAjax()">
    4. div>
    5. <script type="text/javascript" th:src="@{/js/vue.js}">script>
    6. <script type="text/javascript" th:src="@{/js/axios.min.js}">script>
    7. <script type="text/javascript">
    8. var vue = new Vue({
    9. el:"#app",
    10. methods:{
    11. testAjax() {
    12. axios.post(
    13. "/SpringMVC/test/ajax?id=1001",
    14. {username:"admin",password:"123456"}
    15. ).then(response=>{
    16. console.log(response.data);
    17. });
    18. }
    19. }
    20. });
    21. script>

    没有ajax就只能使用超链接和form表单跟后端交互数据,很不方便而且很多功能实现不了

    @RequestBody可以获取请求体信息,使用@RequestBody注解标识控制器方法的形参,当前请求的请求体就会为当前注解所标识的形参赋值

    注: 

    1.@RequestBody:将请求体中的内容和控制器方法的形参进行绑定

    1. @RequestMapping("/test/ajax")
    2. public void testAjax(Integer id, @RequestBody String requestBody, HttpServletResponse response) throws IOException {
    3. System.out.println("requestBody:" + requestBody);
    4. System.out.println("id:" + id);
    5. response.getWriter().write("hello,axios");
    6. }

    二:@RequestBody获取json格式的请求参数

    index.html  

    <input type="button" value="使用@RequestBody注解处理json格式的请求参数" @click="testRequestBody()">

    在使用了axios发送ajax请求之后,浏览器发送到服务器的请求参数有两种格式:

    1、name=value&name=value...,此时的请求参数可以通过request.getParameter()获取,对应 SpringMVC中,可以直接通过控制器方法的形参获取此类请求参数

    2、{key:value,key:value,...},此时无法通过request.getParameter()获取,之前我们使用操作 json的相关jar包gson或jackson处理此类请求参数,可以将其转换为指定的实体类对象或map集 合。在SpringMVC中,直接使用@RequestBody注解标识控制器方法的形参即可将此类请求参数 转换为java对象

    1. testRequestBody() {
    2. axios.post(
    3. "/SpringMVC/test/RequestBody/json",
    4. {username:"admin",password:"123456",age:23,gender:"男"}
    5. ).then(response=>{
    6. console.log(response.data);
    7. });
    8. }

    然后来控制层处理一下

    注:使用@RequestBody获取json格式的请求参数的条件:

    2.使用@RequestBody注解将json格式的请求参数转换为java对象
    a>导入jackson的依赖
    b>在SpringMVC的配置文件中设置
    c>在处理请求的控制器方法的形参位置,直接设置json格式的请求参数要转换的java类型的形参,使用@RequestBody注解标识即可

    jackson依赖 

    1. <dependency>
    2. <groupId>com.fasterxml.jackson.coregroupId>
    3. <artifactId>jackson-databindartifactId>
    4. <version>2.12.1version>
    5. dependency>

     开启注解驱动

    <mvc:annotation-driven />

    方式一:接收成实体类

    1. @RequestMapping("/test/RequestBody/json")
    2. public void testRequestBody(@RequestBody User user, HttpServletResponse response) throws IOException {
    3. System.out.println(user);
    4. response.getWriter().write("hello,RequestBody");
    5. }

    方式二:接收成map集合

    1. @RequestMapping("/test/RequestBody/json")
    2. public void testRequestBody(@RequestBody Map map, HttpServletResponse response) throws IOException {
    3. System.out.println(map);
    4. response.getWriter().write("hello,RequestBody");
    5. }

    三:@ResponseBody

    @ResponseBody用于标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器

        <a th:href="@{/test/ResponseBody}">测试@ResponseBody注解响应浏览器数据a>
    1. @RequestMapping("/test/ResponseBody")
    2. @ResponseBody
    3. public String testResponseBody() {
    4. return "success";
    5. }

    四:@ResponseBody响应浏览器json数据

    4.使用@ResponseBody注解响应浏览器json格式的数据
    a>导入jackson的依赖
    b>在SpringMVC的配置文件中设置
    c>将需要转换成json字符串的java对象直接作为控制器方法的返回值,使用@ResponseBody注解来标识控制器方法就可以将java对象直接转换为json字符串,并响应到浏览器

     实体类-->json对象

    1. @RequestMapping("/test/ResponseBody/json")
    2. @ResponseBody
    3. public User testResponseBodyJson() {
    4. User user = new User(1001,"admin","123456",20,"男");
    5. return user;
    6. }

    map-->json对象 

    1. @RequestMapping("/test/ResponseBody/json")
    2. @ResponseBody
    3. public Map testResponseBodyJson() {
    4. User user1 = new User(1001,"admin1","123456",20,"男");
    5. User user2 = new User(1001,"admin2","123456",20,"男");
    6. User user3 = new User(1001,"admin3","123456",20,"男");
    7. Map map = new HashMap<>();
    8. map.put("1001",user1);
    9. map.put("1002",user2);
    10. map.put("1003",user3);
    11. return map;
    12. }

     list-->json数组

    1. @RequestMapping("/test/ResponseBody/json")
    2. @ResponseBody
    3. public List testResponseBodyJson() {
    4. User user1 = new User(1001,"admin1","123456",20,"男");
    5. User user2 = new User(1001,"admin2","123456",20,"男");
    6. User user3 = new User(1001,"admin3","123456",20,"男");
    7. List list = Arrays.asList(user1, user2, user3);
    8. return list;
    9. }

    常用的Java对象转换为json的结果:

    实体类-->json对象

    map-->json对象

    list-->json数组

    五:@RestController注解

    @RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了 @Controller注解,并且为其中的每个方法添加了@ResponseBody注解

  • 相关阅读:
    Redis-cluster集群详细部署配置--有手就行
    推荐一种更加便捷的 Python 数据处理方式
    软考52-上午题-【数据库】-关系模式2
    MindSpore:aicpu自定义Reshape算子验证symbol报错
    苹果为小学生推出编程指南
    前端生态系统:构建现代Web应用的完整指南
    【广州华锐互动】VR内容创作工具极大地丰富了现代教学内容和形式
    【JavaScript保姆级教程】数组的基本使用
    高通导航器软件开发包使用指南(14)
    ARM Linux DIY(十一)板子名称、开机 logo、LCD 控制台、console 免登录、命令提示符、文件系统大小
  • 原文地址:https://blog.csdn.net/m0_56379670/article/details/127685692