IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> SMVC4: JSON文件的使用 -> 正文阅读

[JavaScript知识库]SMVC4: JSON文件的使用

4.1 概览

4.1.1 简介

? JSON是一种数据交换格式,其实就是一种文本格式。其层次结构清晰,并且易于阅读,能够有效地调高网络传输效率。由一对键值对组成,二者使用冒号分开,各自分别使用引号包裹。花括号表示对象,方括号表示数组。

{"name""爱情"}
{"tips":"啥也不是"}

4.1.2 JS对JSON的支持

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON演示页面</title>
</head>
<body>

<script>
    var user ={
        name:"猪大肠",
        age:3,
        gender:"男"
    }

    var json = JSON.stringify(user)
    console.log("js转换为JSON"+json)

    var object = JSON.parse(json)
    console.log(object)
</script>

</body>
</html>

提示: 从上面的例子中可以看出来,前端页面对JSON文件是完美支持的,数据可以在JS对象与JSON文件之间进行转化。因此,JSON文件可以作为前后端交互的媒介。值得一提的是,在控制台输出的JSON是文本格式,不可展开。而输出的js对象,则可以展开。

4.2 Jackson的使用

4.2.1 简介

? Jackson是一个将字符串处理为JSON文件的工具,当后端接口需要返回给前端字符串时,便可以通过该工具,将字符传进行格式化。

4.2.2 依赖

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

4.2.3 数据环境

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">

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <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>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

springmvc-servlet.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">

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <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>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

User.java:

package com.yun.pojo;

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String job;
}

4.2.4 使用

JsonController.java:

package com.yun.controller;

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

@Controller
public class JsonController {


    @RequestMapping("/json")
    @ResponseBody
    public String getJson() throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        User user = new User(2,"猪刚烈","天蓬元帅");
        String str = mapper.writeValueAsString(user);

        return str;
    }
}

提示: URL栏访问:http://localhost:8080/SpringMVC_05_json_war_exploded/json。便会返回user对象文本格式的JSON数据。但这里值得注意的是,ObjectMapper 是一个JSON格式处理工具类,可以把文本输出成为Json格式。但是,我们通过toString方法同样可以实现相应的功能。并且 @ResponseBody 注解的作用是,不使当前请求返回给视图解析器,而是单纯返回一个文本。当然除了 @ResponseBody ,我们也可以使用 @RestController 来代替 @Controller 注解。但是,上述返回的json数据,很有可能出现中文乱码。

4.2.5 Jackson数据乱码问题

  • 方式一:每个请求配置一次
@RequestMapping(value = "/json", produces = "application/json;charset=utf8")

提示: 此方式,是配置在 控制器 文件中。

  • 方式二:一本万利
<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>

提示: 此方式,是配置在 springmvc-servlet.xml 文件中。

4.2.6 关于Jackson对于时间的处理

JacksonController.java:

package com.yun.controller;

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

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

@Controller
public class JsonController {

    @RequestMapping("/jsondate")
    @ResponseBody
    public String getJsonDate() throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        Date date = new Date();
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = sim.format(date);

        str = mapper.writeValueAsString(str);

        return str;
    }
    
       	@RequestMapping("/jsondate1")
    	@ResponseBody
   		public String getJsonDate1() throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,true);

        Date date = new Date();
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(sim);

        String str = mapper.writeValueAsString(date);

        return str;
    }
}

提示: 上述使用了两种Jackson对时间的支持,如果不使用格式,那么输出的则是时间戳,而不是格式化的时间。所谓时间戳,是指自1970年1月1日 00:00:00 到目前为止的毫秒数。

4.2.7 Jackson工具类

JsonController.java:

package com.yun.controller;

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

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

@Controller
public class JsonController {

    @RequestMapping("/jsonlist")
    @ResponseBody
    public String getJsonList() throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        List list = new ArrayList<User>();

        User user = new User(2,"猪刚烈","天蓬元帅");
        User user1 = new User(2,"猪刚烈","天蓬元帅");
        User user2 = new User(2,"猪刚烈","天蓬元帅");
        User user3 = new User(2,"猪刚烈","天蓬元帅");

        list.add(user);
        list.add(user1);
        list.add(user2);
        list.add(user3);

        String str = mapper.writeValueAsString(list);
        return str;
    }
}

提示: 上面的例子证明了,Jackson可以将集合也转换为json数据,于是,我们可以将该方法抽象成为一个Jackson工具类。

JacksonUtil.java:

package com.yun.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

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

public class JacksonUtil {
    public static String getJson(Object object){
        return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }
    public static String getJson(Object object,String dateFormate){
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

        SimpleDateFormat sim = new SimpleDateFormat(dateFormate);
        Date date = new Date();
        mapper.setDateFormat(sim);
        
        try {
            return mapper.writeValueAsString(date);
        }catch (Exception e){
            return null;
        }
        
    }
}

写在最后,如果遇见index.jsp页面可以访问成功,但是控制器死活访问不了的情况,在排除代码问题之后,可以当前项目的war包里是否有lib文件夹,其内是否有相应的jar包。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:04:39  更:2021-09-26 10:04:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:06:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码