目录
一、JSON概念
二、常用类型
三、基本使用
四、@JsonIgnore&@JsonIgnoreProperties()
五、 解决JSON日期格式化问题:@JsonFormat
一、JSON概念
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
二、常用类型
任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
三、基本使用
3.1 添加jackson相关依赖
com.fasterxml.jackson.core jackson-databind2.9.3
3.2 在spring-mvc.xml文件添加如下内容
text/html;charset=UTF-8 text/json;charset=UTF-8 application/json;charset=UTF-8
3.3 注解介绍:
注解-@ResponseBody:将Controller方法的返回结果直接写入到 response对象的 body中,通常用来返回JSON数据或者XML数据。需要注意的是,使用此注解之后,Controller方法的返回值不会再走视图解析器,而是直接写到输出流中,
添加位置:
添加在方法上:只对当前方法起作用。
添加在类上:对该类里面的所有方法都起作用。
注解-@RestController:等同于@Controller和@ResponseBody;
添加位置:只能添加在类上面,该类里面的所有方法返回的都是JSON数据。
3.4 在请求处理方法中添加@ResponseBody注解,将返回结果直接转换成JSON
@RequestMapping("/loadFwxxToJson")
@ResponseBody
public Fwxx loadFwxxToJson(@ModelAttribute Fwxx fwxx) {
...
}
注:此请求处理方法返回的已经不是视图了
3.5 测试方法:
Book实体类型:通过书本id查询单个书本方法,返回单个书本对象;
List
List
定义方法
ListqueryPager(Book book); Book querySingleBook(Integer bookId); @MapKey("bookId") List
编写sql
select from tb_book where true and book_name like concat('%',#{bookName},'%') order by book_id desc
controller层
@Controller
//@RestController//==@Component + @ResponseBody
@RequestMapping("/book")
public class BookController {
@Autowired
public IBookService bookService;
@RequestMapping("/toPage/{page}")
public String toPage(@PathVariable String page){
return page;
}
@ResponseBody //将数据结果转换成json
@RequestMapping("/queryPager")
public List queryPager(Book book,HttpServletRequest request){
PageBean pageBean = new PageBean();
pageBean.setRequest(request);
return bookService.queryPager(book,pageBean);
}
@ResponseBody
@RequestMapping("/querySingleBook/{bookId}")
public Book querySingleBook(@PathVariable Integer bookId){
return bookService.querySingleBook(bookId);
}
@ResponseBody
@RequestMapping("/queryAllListMap")
public List
前端页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/static/comment/head.jsp"%>
Title
- 分页查询-queryPager-返回List<Book>
- 查询单个-querySingleBook-返回Book
- 查询所有-queryAllListMap-返回List<Map<String,Object>>
- 混合模式-queryPager1-返回Map<String,Object>
测试打印的数据是json格式
四、@JsonIgnore&@JsonIgnoreProperties()
@JsonIgnore:此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性。
@JsonIgnore // 忽略该字段
private String bookName;
@JsonIgnoreProperties():一般标记在属性或者方法上,返回的json数据即不包含该属性
@JsonIgnoreProperties({"bookName","bookPrice"})
public class Book {
private Integer bookId;
private String bookName;
private Float bookPrice;
}



