springmvc狂神说自学 json 篇

一,认识json( JavaScript Object Notation:js对象标记 )


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

(2) 容易阅读 同时也容易让机器解析和生成,有效的提高了网络的传输效率

(3) 任何JavaScript支持的类型都可以通过接送来传输,对象表示为键值对,数据 直接由逗号分隔,花括号存储对象 ,中括号存储数组


二,jackson的使用


0.吧基本mvc环境搭建好

1.要使用jackson就要导入依赖

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

2.配置解决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>

3,编写controllo文件创建 ObjectMapper 对象

注意:使用 @ResponseBody注解要 配合 @Controller注解一起使用

            RestController     和  ResponesBody 的作用一致

//@Controller//走试图解析器
@RestController //标记了下面之会返回字符串
public class SpringmvcJson {
    @RequestMapping("/s/j1")
    //@ResponseBody //就不会走视图解析器,直接返回一个字符串 配合Controller标签一起使用的
    public String json1() throws JsonProcessingException {
        final ObjectMapper om = new ObjectMapper();
        User user = new User("张三",1,200);
//     把他转换成json格式
        String j=om.writeValueAsString(user);
        return j;
    }

三,玩法


1,可以测试date    , 数组    ,和对象的表示形式


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

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

//@Controller//走试图解析器
@RestController //标记了下面之会返回字符串
public class SpringmvcJson {
    @RequestMapping("/s/j1")
    //@ResponseBody //就不会走视图解析器,直接返回一个字符串 配合Controller标签一起使用的
    public String json1() throws JsonProcessingException {
        final ObjectMapper om = new ObjectMapper();
        User user = new User("张三",1,200);
        String j=om.writeValueAsString(user);
        return j;
    }

    /**
     * json 打印数组样式
     * @return
     * @throws JsonProcessingException
     */
    @RequestMapping("/s/j2")
    public String json2() throws JsonProcessingException {
        final ObjectMapper om = new ObjectMapper();
        ArrayList<User> userArrayList = new ArrayList<User>();
        User user1= new User("张三1",1,200);
        User user2= new User("张三2",1,200);
        User user3= new User("张三3",1,200);
        User user4= new User("张三4",1,200);
        userArrayList.add(user1);
        userArrayList.add(user2);
        userArrayList.add(user3);
        userArrayList.add(user4);
        String j=om.writeValueAsString(userArrayList);
        return j;
    }
    
//   方法一
    /**
     * json 输出date格式
     * 思路
     * 在原来的基础上直接设置
     * 返回的对象产生变化
     */
    @RequestMapping("/s/j3")
    public String json3() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return mapper.writeValueAsString(sdf.format(date));
    }

//   方法二
    /**
     * 思路
     * 吧原来的格式关闭  在设置一个
     * 好处  返回的对象依旧是Date
     */
    @RequestMapping("/s/j4")
    public String json4() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
//        意思就是吧原本的 时间差 关闭了
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(sdf);
        Date date = new Date();
        return mapper.writeValueAsString(date);
    }

date的进阶玩法

第一步  :吧上面的代码独立写成一个工具类

package com.kuang.utlis;

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

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

public class JsonUtlis {

    public static String getJson(Object object){
        return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }

    public static String getJson(Object object , String dateFormat){
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        mapper.setDateFormat(sdf);
        Date date = new Date();
        try {
            return mapper.writeValueAsString(date);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

第二步,直接调用刚刚写的工具类即可

 /**
     * 进阶版   自己写一个工具包 来提高代码的复用性
     * @return
     * @throws JsonProcessingException
     */
    @GetMapping("/j5")
    public String json5(){
        Date date = new Date();
        return new JsonUtlis().getJson(date);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值