springMVC-处理json和HttpMessageConverter<T>

细节说明:目标方法正常返回JSON需要的数据,可以是一个对象,也可以是一个集合,这里我们返回的是一个Dog对象>转成Json数据格式

示例案例:

在springmve中,如果我们返回一个集合List等,或者返回一个对象,那么springmve可以根据注解来重新进行编码处理,使其成为一个json格式的数据并返回给浏览器.

0、添加依赖,引入spring时自带

1、新建一个cat的javaBean 

public class Cat {private String name;private String address;public Cat() {}

2、写handler ,使用@ReposeBody修饰目标方法

@Controller
public class JsonHandler {@RequestMapping(value = "/getJson")@ResponseBodypublic Cat getJson() {Cat cat = new Cat();cat.setName("宝宝");cat.setAddress("广西");return cat;}
}

3、

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script type="text/javascript"  src="script/jquery-3.7.1.min.js"></script><script type="text/javascript">$(function(){$("#getJson").click(function () {//这是一个完整的请求var href = this.href;alert(href);var args = {"time":new Date()};$.post(href,args,function(data){//data就是服务器返回的json数据alert("name ="+data.name+"address ="+data.address);})//阻止超链接提交请求return false;})})</script></head>
<body>
<a href="getJson" id="getJson">点击获取Json数据</a>
</body>
</html>

4、效果

原理说明 

SpringMVC是依靠HttpMessageConverter<T>来进行转换的,

(1).使用HttpMessageConverter<T>将请求信息转化并绑定到处理方法的入参中或将响应结果转为对应类型的响应信息,Spring提供了两种途径:使用@RequestBody/@ResponseBody 对目标方法进行标注使用HttpEntity<T>/ResponseEntity<T>作为目标方法的入参或返回值


(2).当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>时,Spring 首先根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter将报错


(3).@RequestBody和@ResponseBody不需要成对出现

@RequestBody注解

通过@Reauestbodv注解可以将接收到的reauest请求数据【比如字段,其至文件…】,直接转成String,有时我们在开发中就有这样的需求

(需求:比如前端传了一个文件,我们直接就是要他的String字符串)即可以以字符串的形式接收文件

1、写一个目标方法,使用@RequestBody来修饰目标方法的参数,这样接收过来时就会转换

 @RequestMapping(value = "/getJson01")public void getJson01(@RequestBody String content) {System.out.println("文件的内容 "+content);}
<h1>提交一个文件</h1>
<form action="/getJson01" method="post" enctype="multipart/form-data">文件:<input type="file" name="file"><br>提交:<input type="submit" value="提交">
</form>

2、效果,点击提交文件后,获取到了test.txt的文件内容“hello world”

文件下载

基于HttpMessageConverter<T>的特性,可以实现一个文件下载的功能。

在SpringMVC中,通过返回ResponseEntity<T>的类型,可以实现文件下载的功能。


@Controller
public class DownloadHandler {@RequestMapping(value = "/download")public ResponseEntity<byte[]> download(HttpSession session) throws IOException {//先获取到你要下载的文件的字节输入流inputStreamInputStream is = session.getServletContext().getResourceAsStream("/images/java.png");//开辟一个字节数组存放文件数据byte[] bytes = new byte[is.available()];is.read(bytes);HttpStatus status =  HttpStatus.OK; //返回成功HttpHeaders headers = new HttpHeaders();//这是告诉浏览器这是返回的一个文件,需要弹出窗口headers.add("Content-Disposition", "attachment;filename=java.png");return  new ResponseEntity<byte[]>(bytes, headers, status);}
}
<h1>测试文件下载</h1>
<a href="download">下载文件</a>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

钓鱼篇(下)

选择水域 比较常用方式如传统的邮箱打点、dns劫持欺骗等方式 其实生活中有非常多攻击点(主要是人们总是自信地认为黑客不会在他们的身边) 班级群里面、教师群等社交关系群里面&#xff0c;本身具备了高信任的特点&#xff0c;所以制作点热点话题&#xff0c;打开一个URL并不…

eNSP错误40,原因三:windows10自带虚拟化软件Hyper-V

问题描述 Hyper-V软件与VirtualBox不兼容&#xff0c;一旦开启Hyper-V的话eNSP的路由器就会无法开启&#xff0c;显示ERROR 40 原理 大家注意看hypervisor的两种类型&#xff1a; 左边的是开启hypervisor的Type-1&#xff0c;hypervisor在启用的时候&#xff0c;宿主机也相…

两种经典的现货白银假突破类型

假突破是现货白银市场中一种具有反大众性的市场行为。它通常和一种强势的市场行为突破联系在一起&#xff0c;但是它的方向是和突破完全相反的&#xff0c;识别假突破的类型&#xff0c;有助于降低我们亏损的风险&#xff0c;那如何识别呢&#xff1f;下面我们来介绍两种假突破…

CiteSpace最新安装教程

目录 一、CiteSpace特点介绍 二、CiteSpace安装教程 1、安装java 2、配置java环境变量 3、安装CiteSpace 4、运行CiteSpace 一、CiteSpace特点介绍 CiteSpace是一种用于分析学术文献的可视化工具&#xff0c;旨在帮助研究人员理解学术领域的演化、发现研究热点和趋势。 …

c++ qt 模态框和阻拦器 优先级 问题 修复 已解决

在c项目中。有 加载动画 和 模态框提醒的功能, 导致发生一个问题&#xff0c;有提示框的时候&#xff0c;动画也停止&#xff0c;必须点击 按钮 所有代码才能有效。 解决办法 谨慎使用 deleteLater,因为和模态框拦截有冲突, 使用 隐藏 或者 删除指针。 deleteLater 使用逻辑是 …

狮子目标检测数据集VOC+YOLO格式1400张

狮子&#xff08;Lion&#xff09;是一种生活在非洲和印度的大型猫科动物。它们是一种非常强壮和威猛的动物&#xff0c;通常被称为“草原之王”。狮子的身体结构非常适应于它们的生活方式&#xff0c;有着强壮的肌肉和锋利的牙齿。 狮子的身高一般在1.2-1.5米之间&#xff0c…

【保姆级教程】使用Mediapipe进行Face Landmark Detection实践和Hand Landmark实践

目录 1 Mediapipe 2 Solutions 3 安装依赖库 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。与资源消耗型的机…

依托亚马逊云科技构建韧性应用

背景 现代业务系统受到越来越多的韧性相关的挑战&#xff0c;特别是客户要求他们的业务系统 724 不间断的运行。因此&#xff0c;韧性对于云的基础设施和应用系统有着至关重要的作用。 亚马逊云科技把韧性视为一项最基本的工作&#xff0c;为了让我们的业务系统能持续优雅地提供…

建构伦敦银交易策略可遵循的三个原则

构建交易策略&#xff0c;我们应该遵循什么原则呢&#xff1f;有的人说可以盈利就行了&#xff0c;确实盈利是很关键的&#xff0c;没有人想使用一个导致自己亏损的策略。但构建伦敦银策略的时候可不能简单地以一个可以盈利带过&#xff0c;下面我们就来介绍构建策略时所需的三…

Python实现接口测试总结--PyMySql库+封装

import pymysql # 封装数据库工具类 class DBUtil ( object ): # 添加类属性 conn None classmethod def __get_conn ( cls ): # 判断 conn 是否为空&#xff0c;如果是&#xff0c;创建 if cls . conn is None : cls . conn pymysql . connect ( host…

java 项目日记实现两种方式:拦截器方式实现日记与定义日记注解方式实现日记

通常只要是java web项目基本都离不开项目日记&#xff0c;项目日记存在的意义很多&#xff0c;例如&#xff1a;安全审计&#xff0c;问题追踪都离不开项目日记。下面我们说一下项目日记实现最常用的两种方式 。 一 拉截器实现项目日记 1 实现一个拦截器基类&#xff0c;用于事…

逻辑斯蒂回归-建模概率计算(鸢尾花)

导入的数据说明 因为气候不同&#xff0c;造就性不同&#xff0c;统计鸢尾花的关键特征数据&#xff1a;花萼长度、花萼宽度、花瓣长度&#xff0c;花瓣宽度 植物学家划分&#xff1a; setosa(中文名&#xff1a;山鸢尾) versicolor(中文名&#xff1a;杂色鸢尾) virginica(中…

小鹅通基于 TSE 云原生 API 网关的落地实践

导语 2023腾讯全球数字生态大会已于9月7-8日完美落幕&#xff0c;40专场活动展示了腾讯最新的前沿技术、核心产品、解决方案。 微服务与消息队列专场&#xff0c;我们邀请到了小鹅通的基础架构组负责人黄徐震为我们带来了《小鹅通基于 TSE 云原生网关的落地实践》的精彩演讲。…

鹦鹉目标检测数据集VOC+YOLO格式2000张

鹦鹉是一种非常受欢迎的鸟类&#xff0c;它们通常生活在热带和亚热带地区的森林和草原中。鹦鹉是一种非常聪明、有趣和亲密的动物&#xff0c;也是一种受到广泛关注和保护的物种。 鹦鹉的身体结构非常适应于它们的生活方式。它们的身体非常修长&#xff0c;有着漂亮的羽毛和强…

flutter开发windows应用的库

一、window_manager 这个插件允许 Flutter 桌面应用调整窗口的大小和位置 地址&#xff1a;https://github.com/leanflutter/window_manager二、win32 一个包&#xff0c;它使用FFI包装了一些最常见的Win32 API调用&#xff0c;使Dart代码可以访问这些调用&#xff0c;而不需…

腾讯云服务器上传文件 :Permission denied (os error 13) ,由于权限无法上传

根据网上的修改云服务器上传文件目录的权限&#xff0c;或是用root权限上传本地文件&#xff0c;均失败。 正解办法&#xff1a; ubuntu:/home/wwwroot# sudo passwd root Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully首先修…

【论文笔记】NeuRAD: Neural Rendering for Autonomous Driving

原文链接&#xff1a;https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场&#xff08;NeRF&#xff09;应用在自动驾驶中&#xff0c;可以创建可编辑的场景数字克隆&#xff08;可自由编辑视角和场景物体&#xff09;&#xff0c;以进行仿真。但目前的方法或者需要大量的训…

图像处理—小波变换

小波变换 一维小波变换 因为存在 L 2 ( R ) V j 0 ⊕ W j 0 ⊕ W j 0 1 ⊕ ⋯ L^{2}(\boldsymbol{R})V_{j_{0}}\oplus W_{j_{0}}\oplus W_{j_{0}1}\oplus\cdots L2(R)Vj0​​⊕Wj0​​⊕Wj0​1​⊕⋯&#xff0c;所以存在 f ( x ) f(x) f(x)可以在子空间 V j 0 V_{j_0} Vj0…

springboot使用Validated实现参数校验

做为后端开发人员&#xff0c;一定有前端传的数据是可能会出错的警惕性&#xff0c;否则程序就可能会出错&#xff0c;比如常遇到的空指针异常&#xff0c;所以为了程序运行的健壮性&#xff0c;我们必须对每一个参数进行合法校验&#xff0c;就能避免很多不必要的错误&#xf…

【高效开发工具系列】eclipse部署web项目

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…