通过SpringMVC框架响应JSON数据

举报
海拥 发表于 2021/10/14 14:35:35 2021/10/14
【摘要】 🌊 作者主页:海拥🌊 简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员、🥈蝉联C站周榜前十 1. 通过SpringMVC框架响应JSON数据在SpringMVC框架(含SpringBoot框架)中,当处理请求的方法之前添加了@ResponseBody后,或在控制器类之前使用的是@RestController,处理请求的方法的返回值将作为响应到客户端的数据。当服务器向客户端响应...

🌊 作者主页:海拥
🌊 简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员、🥈蝉联C站周榜前十

1. 通过SpringMVC框架响应JSON数据

在SpringMVC框架(含SpringBoot框架)中,当处理请求的方法之前添加了@ResponseBody后,或在控制器类之前使用的是@RestController,处理请求的方法的返回值将作为响应到客户端的数据。

当服务器向客户端响应数据时,SpringMVC框架会使用“转换器”(Converter)将方法的返回值进行转换,及处理响应时的响应头(Response Headers)等内容,针对返回值类型不同,SpringMVC框架还会自动使用不同的转换器。

当响应数据的类型(处理请求的方法的返回值类型)是String时,会自动使用StringHttpMessageConverter转换器,该转换器就会自动将返回的字符串作为数据响应到客户端,并且,还会设置响应头,默认情况下,在响应头中会设置Content-Type属性,其值是text/html; charset=ISO-8859-1,所以,在SpringMVC框架(不含SpringBoot框架)中,默认情况下,响应的String是不支持中文的!

当响应数据的类型是SpringMVC框架默认并不识别的类型时,且当前开发环境添加了jackson-databind依赖,SpringMVC框架会自动使用jackson-databind中的转换器,而jackson-databind中的转换器的工作方式就是将响应结果组织成JSON格式的数据,并且,将响应头中的Content-Type设置成了application/json; charset=UTF-8

在项目中只需要确保添加了jackson-databind依赖即可,并不需要进行额外的配置,也不需要显式的使用到该框架中的某个类!

如果是使用XML进行相关配置的SpringMVC项目,需要在Spring的配置文件中开启注解驱动,即在配置文件中添加:

<annotation-driven />

总的来说,如果需要SpringMVC框架能够响应JSON格式的数据,需要:

  • 使用@RestController@ResponseBody注解;
  • 在项目中添加jackson-databind依赖;
  • 自定义处理请求的方法的返回值类型(只要是自定义的类型,就一定是SpringMVC框架默认不识别的类型)

当然,某个控制器类中,如果已经使用了@RestController注解,会表示“当前控制器类中处理的所有请求都将响应数据”,就不会执行转发或重定向的操作了,如果一定要执行转发或重定向,可以:

  • 不使用@RestController注解,而是在每个需要响应数据的方法之前逐一添加@ResponseBody注解;
  • 在使用@RestController的情况下,将需要转发或重定向的方法的返回值类型声明为ModelAndView类型。

🌊 面试题库:Java、Python、前端核心知识点大全和面试真题资料
🌊 电子图书:图灵程序丛书 300本、机械工业出版社6000册免费正版图书
🌊 办公用品:精品PPT模板几千套,简历模板一千多套
🌊 学习资料:2300套PHP建站源码,微信小程序入门资料

公众号【海拥】内回复【资源】获取以上所有资料

我已经写了很长一段时间的技术博客,这是我的一篇关于整合基于注解的SSM框架小结。我乐于通过文章分享技术与快乐。您可以访问我的博客主页: 华为云-海拥、我的个人博客:haiyong.site 以了解更多信息。希望你们会喜欢!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。