JSON与Javascript与Jackson

JSON和Jackson的使用


前言

以下内容乱写的以提醒自己为主:
JSON,纯文本格式,就是一个字符串
前后端分离时代,后端部署后端,提供接口,提供数据
请求Controller返回的String即可是一个接口
(这里指Controller)

一、JSON与Javascript对象

Javascript对象转为JSON

//编写一个JS对象
var user = {
	name = "zhangsan",
	age = 20,
	sex = "男"
};
var json = JSON.stringify(user);
//这里的json就是一个JSON格式的字符串了

JSON转为Javascript对象

var obj = JSON.parse(json);
//这里就把上面的json转为一个JS对象了

二、Jackson的使用

1.导入Jackson依赖

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

2.在Controller中使用

先准备一个实体类User,里面有name和age属性
在Controller中创建一个这个类的对象然后操作它

返回对象JSON

@Controller
public class testController {
    /*
	@ResponseBody
	在Controller类的方法上面加上这个,那么这个返回值String,
	将不会走视图解析器,会直接返回一个字符串
	*/
	@ResponseBody
    @RequestMapping("jsontest1")
    public String json1(){
       	//Jackson
        ObjectMapper mapper = new ObjectMapper();
        //创建User对象
        User user = new User("张三",20);
        //把这个对象转成JSON字符串格式
        String jsontest = mapper.writeValueAsString(user);
        return jsontest;
    }
}

这样直接在浏览器地址栏访问这个jsontest1得到的就是
结果截图
这样一个样子,这就说明通过使用这个Jackson,
成功将一个Java对象转成了JSON格式的字符串

返回ArrayList的JSON

那么这里在测试传入一个ArrayList里面放了一堆User试试

@RestController
public class testController {
    @RequestMapping(value = "jsontest1")
    public String json1() throws JsonProcessingException {

        //Jackson
        ObjectMapper mapper = new ObjectMapper();
        //创建User对象
        User user1 = new User("张三",20);
        User user2 = new User("张四",20);
        User user3 = new User("张五",20);
        User user4 = new User("张六",20);
        User user5 = new User("张七",20);

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        userList.add(user5);
        //把这个对象转成JSON字符串格式
        String jsontest = mapper.writeValueAsString(userList);
        return jsontest;
    }
}

ArrayList返回截图
发现返回回来是这么个数组,也是可以的

返回时间JSON

这里也可以把时间转一下,那么返回来是一个时间戳timestamp

@RequestMapping(value = "jsontest2")
    public String json2() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(new Date());
    }

时间返回
这样返回回来是这么一串,刷新就会变…

3.JSON字符串转Java对象

在JS代码中,将JSON对象转为JSON字符串后,传向后端,后端将JSON字符串转为Java对象

ObjectMapper mapper = new ObjectMapper();
Books books = mapper.readValue(ubook,Books.class);

这里是把这个JSON字符串转为Books对象

4.处理JSON字符串乱码问题

第一种方式

在@RequestMapping参数中添加produces属性,
如下

@RequestMapping(value = "jsontest1" ,
produces = "application/json;charset=utf-8")

当然,这种方法比较少使用,因为每一个都要加这么一串,

第二种方式

统一配置的方法就是在SpringMVC配置文件中加上这么一大块代码,这样所有的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>

总结

所以要使用Jackson把Java对象转成JSON格式然后传给前端的方法总结如下:
第一步,把Jackson的包导入
第二步,在SpringMVC配置文件中把乱码统一配置解决
第三步,新建一个ObjectMapper对象,然后用这个对象的writeValueAsString方法把Java对象转为JSON即可。

注意:上面的注解要加一个@ResposeBody让返回值String不再是一个试图而是一个字符串。

补充

@RestController

如果在控制器Controller中把那个类上面的@Controller换成@RestController,那么这个类下面的所有方法将都不再通过视图解析器,直接返回一个字符串,也就是JSON格式的字符串,也就是一个接口数据。据说与前后端分离都这么干。
如果用了这个注解,那么刚刚那个@ResponseBody就没啥用可以不写了。

结语

这里说一下,这个是我发的第一篇博客,我还是一个超级萌新小白,刚刚学完SSM,还是那种图速度不图质量的那种,学的懵懵懂懂,模模糊糊,转头就忘,记住也不怎么扎实,上面的内容里的术语肯定错的一堆,如果有幸有人看的话,请原谅以下哈哈哈。
这里写这样的博客主要是督促自己,因为之前学的太草了,好多东西不扎实,没完全弄懂,所以写这样的博客就会很认真,督促自己认真,也不容易忘印象深一些,忘了也能看,所以如果有大佬能指点以下我的错误,这里万分感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值