0


Spring MVC相关注解运用 —— 下篇

一、@ResponseBody、@RestController

作用:方法返回的对象转换为JSON格式,并将JSON数据直接写入到输出流中,使用此注解后不会再经过视图解析器。使用该注解可以处理Ajax请求。
位置:方法上方或方法返回值前

1.1. JSP页面

编写jsp页面,发送ajax请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Ajax请求</title>
    <script src="js/jquery-2.1.1.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                var name = $("#name").val();
                var sex = $("#sex").val();
                $.get("/c8/addStudent",{"name":name,"sex":sex},function (data){
                    console.log(data);
                });
            });
        });
    </script>
</head>
<body>
    姓名:<input id="name"/><br/>
    性别:<input id="sex"/><br/>
    <input type="button" value="提交" id="btn">
</body>
</html>

1.2 放行静态资源

由于jsp页面中引入jQuery的js文件(该.js文件可以去我的资源里面去下载),而SpringMVC会拦截所有资源,造成jquery.js失效,需要在SpringMVC核心配置文件中放行静态资源。

<!-- 放行静态资源 -->
    <mvc:default-servlet-handler />

1.3 编写实体类

编写结果实体类,该实体类会封装一个请求的结果

package com.example.domain;

// 请求的结果对象
public class Result {
    // 请求是否成功
    private boolean flag;
    // 请求提示信息
    private String message;

    public Result(boolean flag, String message) {
        this.flag = flag;
        this.message = message;
    }

    public Result(){}

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

1.4 控制器方法

package com.example.controller;

import com.example.domain.Result;
import com.example.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/c8")
public class MyController8 {

    @GetMapping ("addStudent")
    @ResponseBody
    public Result addStudent(String name,String sex){
        // 输出接受的参数,模拟添加学生
        System.out.println(name+":"+sex);
        // 返回添加结果
        Result result = new Result(true,"添加学生成功!");

        return result;
    }
}

1.5 添加依赖

在pom.xml文件添加对应依赖,SpringMVC会将Result对象转为JSON格式写入输出流,而
SpringMVC默认使用的JSON转换器是jackson,需要在pom中添加jackson依赖。

    <!-- jackson -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.11.3</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.3</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.11.3</version>
    </dependency>

1.6 测试结果

当我们访问jsp时,访问路径:http://localhost:8080/ajax-request.jsp

点击提交之后:打开开发者工具,可以看到控制台都成功打印了,说明已经成功转为json格式了。

1.7 @RestController

如果一个控制器类下的所有控制器方法都返回JSON格式数据且不进行跳转,可以使用@RestController代替@Controller,此时每个方法上的@ResponseBody都可以省略。

二、静态资源映射

当在DispatcherServlet的 <url-pattern> 中配置拦截 “/” 时,除了jsp文件不会拦截以外,其他所有的请求都会经过前端控制器进行匹配。此时静态资源例如css、js、jpg等就会被前端控制器拦截,导致不能访问,出现404问题。想要正常映射静态资源共有三种方案:

2.1 配置静态资源筛查器

在SpringMVC的配置文件中配置<mvc:default-servlet-handler />后,会在Spring容器中创建一个资源检查器,它对进入DispatcherServlet的URL进行筛查,如果不是静态资源,才由
DispatcherServlet处理。
修改SpringMVC核心配置文件:

<mvc:default-servlet-handler/> 

2.2 配置静态资源资源映射器

SpringMVC模块提供了静态资源映射器组件,通过 mvc:resources 标签配置静态资源映射器,配置后的路径不会由DispatcherServlet处理。
修改SpringMVC核心配置文件:

<!-- 配置静态资源映射器 -->
    <!-- mapping:配置请求的URL location:资源路径 -->
    <mvc:resources mapping="/img/" location="/img/"/>
    <mvc:resources mapping="/js/" location="/js/"/>

2.3 配置默认Servlet处理静态资源

在web.xml可以配置默认Servlet处理静态资源,该Servlet由tomcat提供,它会直接访问静态资源不进行其他操作。这样就避免了使用DispatcherServlet对静态资源的拦截:
修改web.xml:

  <!-- 配置默认Servlet处理静态资源 -->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
  </servlet-mapping>

三、@RequestBody

作用:将请求中JSON格式的参数转为JAVA对象
位置:写在方法参数前

3.1 AJAX请求发送JSON格式的参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Ajax请求</title>
    <script src="js/jquery-2.1.1.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                var name = $("#name").val();
                var sex = $("#sex").val();
                var param = JSON.stringify({"name":name,"sex":sex});
                $.ajax({url:"/c8/addStudent2",contentType:"application/json",
                    type:"post",
                    data:param,
                    success:function(data) {
                        console.log(data);
                    }
                })
            })
        })
    </script>
</head>
<body>
姓名:<input id="name"/><br/>
性别:<input id="sex"/><br/>
<input type="button" value="提交" id="btn">
</body>
</html>

3.2 控制器方法

package com.example.controller;

import com.example.domain.Result;
import com.example.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/c8")
public class MyController8 {
    @PostMapping("/addStudent2")
    @ResponseBody
    public Result addStudent2(@RequestBody Student student){
        System.out.println(student);
        // 返回添加结果
        Result result = new Result(true,"添加学生成功!");
        return result;
    }
}

3.3 测试结果

OK,可以看出确实是成功实现了,也打印出来了,说明请求中JSON格式的参数成功转为JAVA对象了

往期专栏&文章相关导读

 大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏Maven工程开发Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置Mybatis入门案例【超详细】MyBatis配置文件 —— 相关标签详解Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)Mybatis分页查询——四种传参方式Mybatis一级缓存和二级缓存(带测试方法)Mybatis分解式查询Mybatis关联查询【附实战案例】MyBatis注解开发---实现增删查改和动态SQLMyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

Spring系列专栏Spring IOC 入门简介【自定义容器实例】IOC使用Spring实现附实例详解Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式Spring DI简介及依赖注入方式和依赖注入类型Spring IOC相关注解运用——上篇Spring IOC相关注解运用——下篇Spring AOP简介及相关案例注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】Spring事务简介及相关案例Spring 事务管理方案和事务管理器及事务控制的APISpring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章

SpringMVC系列专栏Spring MVC简介附入门案例Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器Spring MVC获取参数和自定义参数类型转换器及编码过滤器Spring MVC处理响应附案例详解Spring MVC相关注解运用 —— 上篇
Spring MVC相关注解运用 —— 中篇
Spring MVC相关注解运用 —— 下篇Spring MVC多种情况下的文件上传Spring MVC异步上传、跨服务器上传和文件下载Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】Spring MVC拦截器和跨域请求SSM整合案例【C站讲解最详细流程的案例】

标签: java maven spring

本文转载自: https://blog.csdn.net/qq_53317005/article/details/130507906
版权归原作者 会洗碗的CV工程师 所有, 如有侵权,请联系我们删除。

“Spring MVC相关注解运用 —— 下篇”的评论:

还没有评论