初学SpringMVC之 JSON 篇

news2024/9/23 3:25:35

JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式

采用完全独立于编程语言的文本格式来存储和表示数据

JSON 键值对是用来保存 JavaScript 对象的一种方式

比如:{"name": "张三"},前者键,后者值,冒号分隔

写个 HTML

script 写在 <head> 里

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">

        var user = {
            name:"张三",
            age:18,
            sex:"男"
        };

        console.log(user);

    </script>
</head>
<body>
</body>
</html>

直接在 idea 里查看网页效果 

可以看到控制台打印成功

js 和 json 可以互相转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">

        var user = {
            name:"张三",
            age:18,
            sex:"男"
        };

        //将 js 对象转换成 json 对象
        var json = JSON.stringify(user);
        console.log(json);

        //将 json 对象转换成 js 对象
        var obj = JSON.parse(json);
        console.log(obj);

    </script>
</head>
<body>
</body>
</html>

前者字符串,后者对象

Jackson 是 json 解析工具

pom.xml 文件导入 jackson 的 jar 包

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.17.2</version>
    </dependency>

配置 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

  <!-- 注册servlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!-- 通过初始化参数指定SpringMVC配置文件的位置进行关联 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>

    <!-- 启动顺序 -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 所有请求都会被SpringMVC拦截 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 配置SpringMVC的乱码过滤 -->
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

resources 目录下创建 springmvc-servlet.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.demo.controller"/>

    <!-- 让SpringMVC不处理静态资源 -->
    <mvc:default-servlet-handler/>

    <!-- 支持MVC注解驱动 -->
    <mvc:annotation-driven/>

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

pom.xml 文件导入 lombok 的 jar 包

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
            <scope>provided</scope>
        </dependency>

写个 User 类,设置有参构造和无参构造的注解

package com.demo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//需要导入lombox
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
}

写个控制器

@ResponseBody 表示不走视图解析器,直接返回字符串

jackson 使用方法:

1. new 一个 ObjectMapper

2. 调用 writeValueAsString 方法,转换成 String 类型

方法1:可以使用 @RequestMapping 注解里的 produces 解决 json 乱码

produces = "application/json;charset=utf-8"

package com.demo.controller;

import com.demo.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {
    //解决中文乱码
    @RequestMapping(value = "/json",produces = "application/json;charset=utf-8")
    //@RequestMapping("/json")
    @ResponseBody //加了@ResponseBody表示不走视图解析器,返回字符串
    public String json() throws JsonProcessingException {

        //jackson
        ObjectMapper mapper = new ObjectMapper();

        //创建一个对象
        User user = new User("张三",18,"男");

        String value = mapper.writeValueAsString(user);

        //return user.toString();
        return value;
    }
}

json 请求时出现乱码,SpringMVC 提供了统一解决乱码的方式

方法2:springmvc-servlet.xml 文件添加 json 解决乱码配置

    <!-- JSON乱码问题配置 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

这段配置固定,写了 json 就把这段加上

运行,中文可以正常显示

如果设置了 @RestController 注解,表示只返回 json 形式

package com.demo.controller;

import com.demo.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {
    @RequestMapping("/json2")
    public String json2() throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();

        List<User> userList = new ArrayList<User>();

        User user1 = new User("张三1",18,"男");
        User user2 = new User("张三2",18,"男");
        User user3 = new User("张三3",18,"男");

        userList.add(user1);
        userList.add(user2);
        userList.add(user3);

        String value = mapper.writeValueAsString(userList);

        return value;
    }
}

中括号表示这是一个 list 集合

大括号表示它是一个具体的对象

获取时间:

package com.demo.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
public class UserController {
    @RequestMapping("/json3")
    public String json3() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        Date date = new Date();
        //自定义日期格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //ObjectMapper,时间解析后的默认格式为:Timestamp时间戳
        return mapper.writeValueAsString(simpleDateFormat.format(date));
    }
}

FastJson 可以实现 json 对象与 JavaBean 对象的转换

实现 JavaBean 对象与 json 字符串的转换

实现 json 对象与 json 字符串的转换

导入 fastjson 的 jar 包

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.51</version>
        </dependency>

直接使用 JSON.toJSONString 即可

package com.demo.controller;

import com.alibaba.fastjson.JSON;
import com.demo.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {
    @RequestMapping("/json4")
    public String json4() throws JsonProcessingException {

        List<User> userList = new ArrayList<User>();

        User user1 = new User("张三1",18,"男");
        User user2 = new User("张三2",18,"男");
        User user3 = new User("张三3",18,"男");

        userList.add(user1);
        userList.add(user2);
        userList.add(user3);

        String value = JSON.toJSONString(userList);

        return value;
    }

}

Java 对象转 JSON 字符串:JSON.toJSONString()

JSON 字符串转 Java 对象:JSON.parseObject()

Java 对象转 JSON 对象:JSON.toJSON()

JSON 对象转 Java 对象:JSON.toJavaObject()

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

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

相关文章

ssh -D 选项用于动态(Dynamic)端口转发

举例实现不同ssh连接功能目录 一、功能简介 -D 支持 SOCKS5 协议&#xff0c;可以同时转发 TCP 和 UDP 报文 二、原理介绍 假设拥有三台主机&#xff0c;具体环境如下&#xff1a; 1. 主机 A&#xff1a;本地主机&#xff0c;即 SSH 客户 所在的主机&#xff0c;IP&#xff1…

Python游戏开发——天天酷跑(完整版教程)只需要200行代码就做出了一个天天酷跑小游戏,原来代码做游戏这么简单!零基础也能教你学会!

最近一段时间&#xff0c;小编发现已经好久没有给大家带来趣味游戏的案例展示了。刚好小编趁着周末写了一个《天天酷跑》的游戏&#xff0c;因此拿来跟大家一起分享&#xff0c;和大家一起来重温经典的酷跑游戏。 01 准备开发环境 俗话说&#xff0c;“工欲善其事&#xff0c…

详解:动画专业就业前景和就业方向

随着数字创意产业的蓬勃发展&#xff0c;动画专业已成为越来越多学子的选择。动画专业的就业前景日益广阔&#xff0c;不仅在游戏、影视、广告等传统领域有着广泛应用&#xff0c;还在建筑、教育、医学等多个行业展现出强大的潜力。 那么&#xff0c;何为动画专业呢&#xff1f…

快慢指针的应用(题目来源力扣oj训练)

快慢指针 快慢指针一般用来找到链表的中间节点&#xff0c;就是直接搞两个指针&#xff0c;快指针的移动是慢指针的两倍&#xff0c;那么为什么快慢指针可以找到中间节点&#xff0c;因为假设一个为n的链表&#xff0c;快指针走完慢指针也就是n/2。 具体案例 找链表的中间节…

【深度学习入门篇 ⑦】PyTorch池化层

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

Windows 系统利用 SSH 和 WSL2 子系统当服务器

由于最近组内需要将一台 Windows 系统的电脑 W A W_A WA​ 转成能通过 SSH 访问&#xff0c;并且能用 Linux 命令当服务器运行。忙活了一天&#xff0c;终于是把全部东西弄通了。 安装 SSH 首先就是 W A W_A WA​ 先要安装 OpenSSH 服务&#xff0c;直接按照下面的教程安装…

LVS+Keepalive高可用

1、keepalive 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;vip地址只在主上&#xff0c;vip漂移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;vip会飘回到住服务器 1、配优先级 2、配置vip和真实服务器 3、主…

【Python实战因果推断】38_双重差分9

目录 Doubly Robust Diff-in-Diff Propensity Score Model Delta Outcome Model All Together Now Doubly Robust Diff-in-Diff 另一种纳入干预前协变变量和时间不变协变变量以考虑条件平行趋势的方法是制作双稳健差分法&#xff08;DRDID&#xff09;。要做到这一点&#…

鸿蒙语言基础类库:【@system.brightness (屏幕亮度)】

屏幕亮度 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.brightness]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import brightness from sy…

【接口自动化_13课_接口自动化总结】

一、自我介绍 二、项目介绍 自己的职责、项目流程 1&#xff09;功能测试&#xff0c;怎么设计用例的--测试策略 2&#xff09;功能测试为什么还有代码实现&#xff0c;能用工具实现&#xff0c;为什么还用代码实现。 基本情况 项目名称:项目类型&#xff1a;项目测试人员…

ubantu22.04安装OceanBase 数据库

1、管理员启动cmd,运行 sudo bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/service/installer.sh)" 2、提示如下代表安装完成 3、修改数据库配置文件的密码 sudo vim /etc/oceanbase.cnf 然后保存退…

如何申请自费访问学者?自费访问学者材料要哪些?

四、申请自费访问学者需要准备哪些材料 访问学者的申请材料应包括个人简历、推荐信、成绩单、研究计划或课题、语言能力证明等&#xff0c;资费访问学者需提交财务证明。 申请表格填写基本个人信息、访学时间、访学目的等。且应在个人简历详细列出教育背景、工作经历、学术成…

一张图生成绘画全过程,这下人人都成“原画师”了

玩过SD的应该都知道ControlNet吧&#xff0c;最近ControlNet的作者Lvmin Zhang 又搞了一个开源项目PaintsUndo&#xff0c;在Github刚上线就收获了2.7k Star。 只需要上传一张静态图像&#xff0c;PaintsUndo就可以根据提供的图像自动生成对应的绘画全过程视频。 展示从一张白…

【python报错已解决】Stack Overflow

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在开发的旅程中&#xff0c;我们难免会遇到各种各样的报错信息&#xff0c;这些报错就像旅途中的绊脚石&#xff0c;阻挡…

GA-Kmeans-Transformer-GRU时序聚类+状态识别组合模型,创新发文无忧!

GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01; 目录 GA-Kmeans-Transformer-GRU时序聚类状态识别组合模型&#xff0c;创新发文无忧&#xff01;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GA-Kmeans-Transformer-GRU时…

0601大学物理电磁篇 静电场中的导体和电介质

静电场中的导体和电介质01 6-1静电场中的导体 6-1静电场中的导体

【Hot100】LeetCode—155. 最小栈

目录 题目1- 思路2- 实现⭐155. 最小栈——题解思路 3- ACM 实现 题目 原题连接&#xff1a;155. 最小栈 1- 思路 思路 最小栈 ——> 借助两个栈来实现 2- 实现 ⭐155. 最小栈——题解思路 class MinStack {Stack<Integer> data;Stack<Integer> min;public …

如何在Linux上部署Ruby on Rails应用程序

在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程&#xff0c;需要按照一系列步骤进行。下面是一个基本的部署过程&#xff0c;涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前&#xff0c;需要确保Linux系统上安装了…

etime:拓展time

拓展C库的time模块&#xff0c;时间格式转换、代码块计时器。

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…