JSON演示

JSON介绍

1…基本介绍

JSON (Javascript Object Notation 声明)
是一种轻量级的数据交换格式。
1)数据交换
将数据转换成一种与平台无关的数据格式然后发送给接收方来处理。
2)轻量级
JSON相对于xml,文档更小,解析速度更快。
语法
注:JSON借鉴了javascript的一些语法。
1)表示一个对象
{属性名:属性值,属性名:属性值…}
注意:
a.属性名必须使用双引号括起来。
b.属性值可以是string,number,null,true/false,object。
c.属性值如果是string,必须使用双引号括起来。
2)表示对象组成的数组[{},{},{}…]
如何将java对象转换成JSON字符串。
使用jackson提供的api(ObjectMapper提供的方法)

1.1json表示一个对象(代码演示)
public class TestJson {
	public static void main(String[] args) throws JsonProcessingException {
		
		User user=new User(1,"admin","521125",56933,42);
		//使用jackJson提供的API来将user对象转换为json字符串格式
		ObjectMapper om=new ObjectMapper();
		//将传入的对象序列化为json,返回json字符串
		String jsonstr=om.writeValueAsString(user);
		System.out.println(jsonstr);
		
	}
}

在这里插入图片描述

2.2json表示对象组成的数组
public class TestJson {
	public static void main(String[] args) throws JsonProcessingException {
		
		List<User> list=new ArrayList<User>();
		for(int i=0;i<5;i++){
			User user=new User(1+i,"admin"+i,"0000"+i,10000+i,42+i);
			list.add(user);
		}
		System.out.println(list);
		//将list集合转换成json格式
		ObjectMapper om=new ObjectMapper();
		String jsonstr=om.writeValueAsString(list);
		System.out.println(jsonstr);

	}
}

在这里插入图片描述

2.JSON应用于Spring框架

2.1导入json所需的jar包
		<!--JSON需要导入以下jar包-->
			  <dependency>
			    	<groupId>com.fasterxml.jackson.core</groupId>
			    	<artifactId>jackson-annotations</artifactId>
			    	<version>2.9.9</version>
			   </dependency>
			  
			<dependency>
			    	<groupId>com.fasterxml.jackson.core</groupId>
			    	<artifactId>jackson-core</artifactId>
			    	<version>2.9.9</version>
			</dependency>
			    
			<dependency>
			   		<groupId>com.fasterxml.jackson.core</groupId>
			   		<artifactId>jackson-databind</artifactId>
			    	<version>2.9.9.3</version>
			</dependency>
2.2自定义json返回对象的类

json返回的对象一般包括以下三个信息:

1.数据

2.返回的信息

3.状态

package fyjz.com.json.web;

import java.io.Serializable;

public class JsonResult<T> implements Serializable{
	private T date;//正常数据
	private String message;//返回信息(正确/错误)
	private  int state;
	private static final int ERROR=0;//错误状态
	private static final int SUCCESS=1;//正确状态
	
	//获取正常信息
	public JsonResult(T date) {
		
		this.date=date;
		this.state=SUCCESS;
		this.message="ok";
	}
	
	//获取异常信息
	public JsonResult(Throwable e) {
		this.state=ERROR;
		this.message=e.getMessage();
	}

	public JsonResult() {
		this.state=SUCCESS;
		this.message="ok";
		
	}

	public int getState() {
		return state;
	}



	public void setState(int state) {
		this.state = state;
	}

	public T getDate() {
		return date;
	}
	
	public void setDate(T date) {
		this.date = date;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	@Override
	public String toString() {
		return "JsonResult [date=" + date + ", message=" + message + ", state=" + state + "]";
	}

}

2.3控制层处理数据
@ResponseBody:说明

1.数据以json形式返回给前端,使用在控制层上的方法, 将方法的返回值以特定的格式写到response的body区域,进而将数据返回给前端;

2.当不写@ResponseBody时,底层会将方法的返回值封装为ModelView对象。

3.写@ResponseBody其一:阻止跳转页面,其二:将数据以json格式返回给前端页面
* 注意编码问题:
* 如果返回json字符串格式需要将原来的iso-8859-1字符集改为utf-8,
* 如果返回的是json对象则不需要改变字符集。

1.以json格式返回json字符串
	@RequestMapping(value="demo.do",produces="text/html;charset=utf-8")
	@ResponseBody
	public String test01() throws JsonProcessingException{
		User user=new User(1, "超超", "521125", 520, 20);
		ObjectMapper om=new ObjectMapper();
		String json=om.writeValueAsString(user);
		return json;
	}

在这里插入图片描述

2.以json格式返回json对象
@RequestMapping("demo2.do")
	@ResponseBody
	public User demo2(){
		User u=new User(1,"超个","20212",2185,5551);
		return u;
	}

在这里插入图片描述

3.以json格式返回集合对象
	@RequestMapping("demo3.do")
	@ResponseBody
	public List<User> demo3(){
		List<User> list=new ArrayList<User>();
		for(int i=0;i<5;i++){
			User user=new User(1+i,"admin"+i,"0000"+i,10000+i,42+i);
			list.add(user);
		}
		return list;
	}	

在这里插入图片描述

4.对返回json格式的数据进行优化(有参)
	@RequestMapping("demo4.do")
	@ResponseBody
	public JsonResult<User> demo04(){
		User u=new User(1,"超个","20212",2185,5551);
		return new JsonResult<User>(u);
	}

在这里插入图片描述

5:无参
	@RequestMapping("demo5.do")
	@ResponseBody
	public JsonResult<Void> demo05(){
		
		return new JsonResult<Void>();
	}

调用了类的无参构造方法

在这里插入图片描述
在这里插入图片描述

6.list集合
	@RequestMapping("demo6.do")
	@ResponseBody
	public JsonResult<List<User>> demo6(){
		List<User> list=new ArrayList<User>();
		for(int i=0;i<5;i++){
			User user=new User(1+i,"admin"+i,"0000"+i,10000+i,42+i);
			list.add(user);
		}
		return new JsonResult<List<User>>(list);
	}

在这里插入图片描述

7.List<Map<String,Object>>
	@RequestMapping("demo7.do")
	@ResponseBody
	public JsonResult<List<Map<String,Object>>> demo7(){
		List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
		for(int i=0;i<5;i++){
			Map<String,Object> map=new HashMap<String, Object>();
			map.put("name","超超"+i);
			map.put("age","18"+i);
			list.add(map);
		}
		return new JsonResult<List<Map<String,Object>>>(list);
	}	

在这里插入图片描述

8.程序异常 如果返回返回类型是基本类型,则必须转换成包装类型
	@RequestMapping("demo8.do")
	@ResponseBody
	public JsonResult<Integer> demo08(){
		int a=8;
		if(a==8){
			throw new RuntimeException("错了");
		}
		return new JsonResult<Integer>();
	}


	//捕获异常
	@ExceptionHandler
	@ResponseBody
	public JsonResult<Object> handler(Exception e){
		return new JsonResult<Object>(e);
	}

调用处理异常的构造方法

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值