SpringMVC(JSON数据转换,乱码问题)
1.什么是JSON?
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:对象表示为键值对,数据由逗号分隔
花括号保存对象
方括号保存数组
//json字符串
{"empno": 12,"ename": "yishun","hiredate": "2023-12-02","dept": {"deptno": 22,"dname": "研发部","loc": "郑州市"}
}
//json数组
[{"empno": 1,"ename": "yishun1","hiredate": "2023-12-02","dept": {"deptno": 12,"dname": "财务部","loc": "商丘市"}},{"empno": 2,"ename": "yishun2","hiredate": "2025-12-02","dept": {"deptno": 22,"dname": "研发部","loc": "郑州市"}}
]
2.SpringMVC中Controller接收JSON数据
在前后端分离的架构之中,最为常见的数据交互格式一定使用的是JSON,用户在前端应用里面所提交的表单内容会自动拼凑为对应的JSON数据,并利用一个远程组件Axios发送给服务端,一般来讲此处的操作都是属于跨域访问的形式。如果前端发送的数据是JSON,那么就需要将这个JSON的数据转为对象的实例,那么这时候在控制层参数接收的时候就不能在简单的声明一个对象了,这个对象上需要使用到@RequestBody的注解定义。
如果要想实现此类的架构,首先就是进行JSON数据的解析
FastJSON组件(阿里开源),这个组件不是Spring推荐的组件,Spring推荐使用Jackson组件库
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.1</version>
</dependency>
如果要想使用Jackson组件,需要进行额外的配置处理,因为配置要转换的数据格式
配置Jackson组件
@Configuration
public class JacksonConfig {//JSON的配置类@Bean//进行请求映射的处理public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();MappingJackson2XmlHttpMessageConverter converter =new MappingJackson2XmlHttpMessageConverter();converter.setSupportedMediaTypes(List.of(MediaType.APPLICATION_JSON));//MIME类型adapter.setMessageConverters(List.of(converter));//添加转换器return adapter;}
}
测试
@PostMapping("add")@ResponseBodypublic String add(@RequestBody Emp emp) {//该数据要经过Jackson组件的转换才能使用//Jackson组件自动把json数据解析为对象封装LOGGER.info("【雇员信息】编号:{}、姓名:{}、雇佣日期:{}、部门编号:{}、部门名称:{}、部门位置:{}",emp.getEmpno(), emp.getEname(), emp.getHiredate(), emp.getDept().getDeptno(), emp.getDept().getDname(), emp.getDept().getLoc());return "success";//只关注后台的输出}@PostMapping("array")@ResponseBodypublic String array(@RequestBody List<Emp> empList) {//该数据要经过Jackson组件的转换才能使用for (Emp emp : empList) {LOGGER.info("【雇员信息】编号:{}、姓名:{}、雇佣日期:{}、部门编号:{}、部门名称:{}、部门位置:{}",emp.getEmpno(), emp.getEname(), emp.getHiredate(), emp.getDept().getDeptno(), emp.getDept().getDname(), emp.getDept().getLoc());}return "success";//只关注后台的输出}
测试add()
测试array()
3.解决JSON返回数据中文乱码
此时把add()方法返回的json信息设置为了中文
@PostMapping("add")@ResponseBodypublic String add(@RequestBody Emp emp) {//该数据要经过Jackson组件的转换才能使用LOGGER.info("【雇员信息】编号:{}、姓名:{}、雇佣日期:{}、部门编号:{}、部门名称:{}、部门位置:{}",emp.getEmpno(), emp.getEname(), emp.getHiredate(), emp.getDept().getDeptno(), emp.getDept().getDname(), emp.getDept().getLoc());return "成功";//只关注后台的输出}
Postman测试响应中文乱码
此时在我们的Web配置类中复写以下方法
@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {for (HttpMessageConverter<?> converter : converters) {// 解决 Controller 返回普通文本中文乱码问题if (converter instanceof StringHttpMessageConverter) {((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);}// 解决 Controller 返回json对象中文乱码问题if (converter instanceof MappingJackson2HttpMessageConverter) {((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);}}}
测试
成功解决中文乱码
SpringMVC(JSON数据转换,乱码问题)相关推荐
- springMvc解决json中文乱码
springMvc解决json中文乱码 springMvc解决json中文乱码,springMvc中文乱码,spring中文乱码 >>>>>>>>> ...
- 2020-08-22 SpringMVC中Json使用、后端返回给前端的JSON对象乱码问题、前台对Json数据格式的操作、Jackson以及FastJson使用
json的使用 我们广义上说的后端开发提供接口,其实指的是我们在Controller层定义的域名:端口号/请求名 前端获取这个请求,去赋给比如表单的action,获取相应的结果集并展示. json:轻 ...
- JSON解决乱码问题
1. 正常数据格式的乱码问题 注:如果是一般的请求,(非ajax的json请求乱码,直接在web.xml中配置中文过滤器) 如下: <filter><filter-name>e ...
- Ajax JSON 中文乱码
Ajax JSON 中文乱码 List转JSON,JSON转String 我在使用级联下拉框的时候用到Ajax技术向后台请求子框的信息.但是出现了中文乱码的问题,我尝试了3种方法,发现了一条做最好的解 ...
- springmvc字符 中文乱码问题
springmvc字符 中文乱码问题 1.字符过滤器 输入中文测试,发现乱码 以前乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置,修改了xml文 ...
- php 对象json中文乱码,解决php json中文乱码问题
php json中文乱码的解决办法:首先将类中的中文字段进行url编码:然后再将对象进行json编码:最后进行url解码即可解决乱码问题. PHP中json中文乱码问题解决 问题: 众所周知使用jso ...
- python3 json.dump乱码问题
python3 json.dump乱码问题 json.dumps(obj, ensure_ascii=False) ensure_ascii = True,会忽略掉non-ascii字符 posted ...
- js php 中文乱码怎么解决_探讨PHP JSON中文乱码的解决方法详解
我们知道在使用Ajax技术与PHP后台交互时,中文乱码是常有的事,JSON作为与XML类似的数据交换格式,在PHP用来进行交互时也会出现中 文乱码的情况,解决PHP JSON中文乱码的方法思路其实与P ...
- json数据转换成表格_电子表格会让您失望吗? 将行数据转换为JSON树很容易。
json数据转换成表格 Like many of you, I often have to take the result of SQL queries and convert the rowsets ...
- 使用 pqgrid 将JSON数据转换成TABLE
使用 pqgrid 将JSON数据转换成TABLE <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http: ...
最新文章
- 中小企业低成本快速建站的秘诀——模板建站
- Python基础(7)——for循环
- 泛微e9隐藏明细表_泛微E8 隐藏行、明细表
- python继承编程教程_Python实现通过继承覆盖方法示例
- c语言乘法口诀倒三角,乘法口诀表,C语言实现
- 流程展示 php,js实现动态的流程进度展示条
- python中的下标索引
- Matlab--m代码转C与C++代码)2(详尽示例与描述)
- Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll(转)...
- MSSQL表别名使用注意事项
- UNIGUI接收普通消息和被动回复用户消息
- URLEncoder与URLDecoder
- win7下快捷方式关联错误的修复
- 【CSS】设置 border 长度
- 【图论-二分图】中山纪念中学暑期游Day15——【NOIP2013模拟联考3】沙耶的玩偶(doll)
- (基础知识)单反镜头的参数辨别
- 计算机思维能力培养的核心是什么,【计算机基础论文】计算机基础教学中计算思维能力培养(共6714字)...
- 苹果授权登录绑定手机号被拒绝
- ERROR Error: command failed: yarn
- 网易有道 IP地址、手机号码归属地和身份证 查询接口API