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

news/2024/11/7 13:35:35/

目录

一、@ResponseBody、@RestController

1.1. JSP页面

1.2 放行静态资源

1.3 编写实体类

1.4 控制器方法

1.5 添加依赖

1.6 测试结果

1.7 @RestController 

二、静态资源映射

2.1 配置静态资源筛查器

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

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

三、@RequestBody

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

3.2 控制器方法

3.3 测试结果

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章

4. 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")@ResponseBodypublic 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")@ResponseBodypublic 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注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

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

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站讲解最详细流程的案例】

http://www.ppmy.cn/news/806775.html

相关文章

电脑C盘恢复初始化

一、系统版本 Windows 10 二、步骤 点击&#xff1a;设置→更新和安全→恢复&#xff0c;开始

matlab初始化界面卡住,Matlab初始化initializing极慢解决方法

Matlab初始化initializing极慢解决方法 Matlab升级以后&#xff0c;功能的确丰富了好多&#xff0c;有些函数也更加人性话了&#xff0c;好多bug也没有了。但是可恼的是&#xff0c;这个该死的家伙却一天比一天肥&#xff0c;MATLAB7.6a居然达到了3.76G&#xff0c;启动和打开…

Java 类的初始化

类的初始化详细过程 字节码-->加载-->验证-->准备-->解析-->初始化 1&#xff09;加载&#xff1a;通过类的完全限定名找到类文件所在位置&#xff0c;根据其中的字节码创建java.lang.Class对象&#xff0c;所以才会说万物皆对象&#xff0c;我们也可以继承Cl…

串口初始化配置详解

STC15系列单片机之串口初始化 什么是串口 简单理解就是一个电脑和单片机之间沟通的桥梁&#xff0c;从电脑角度考虑&#xff0c;我要发送信息给单片机&#xff0c;我需要什么&#xff0c;肯定是需要一个数据线对吧&#xff0c;将我要传给单片机的信息通过数据线发送过去&…

swiper基本初始化

Swiper常用于移动端网站的内容触摸滑动 Swiper是纯javascript打造的滑动特效插件&#xff0c;面向手机、平板电脑等移动终端。 Swiper能实现触屏焦点图、触屏Tab切换、触屏轮播图切换等常用效果。 Swiper开源、免费、稳定、使用简单、功能强大&#xff0c;是架构移动终端网站的…

java-初始化数组

Java 语言中数组必须先初始化&#xff0c;然后才可以使用。所谓初始化&#xff0c;就是为数组的数组元素分配内存空间&#xff0c;并为每个数组元素赋初始值。 能不能只分配内存空间&#xff0c;不赋初始值呢&#xff1f; 不行&#xff0c;一旦为数组的每个数组元素分配了内存…

pytorch tensor 初始化_PyTorch简明笔记[1]-Tensor的初始化和基本操作

听麻麻说,偷偷收藏而不感谢是不礼貌的,至少应该点个赞~我觉得麻麻说的对! 不断地被人安利PyTorch,终于忍不住诱惑决定入坑了。 当初学习TensorFlow的时候,没有系统性地学习。之前TF的英文官网一直看不了,而中文版的文档又很烂,导致学起来一直不那么爽,每次搭建模型的时…

DMA初始化设置

DMA(Direct Memory Access) ,即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。 DMA技术的重要性在于,利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一…