一、什么是JSON
- JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
- 采用完全独立于编程语言的文本格式来存储和表示数据。
- 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
- 对象:{'bid':1,'bname':'java入门到入土'}
- 数组:{1,2,3,4,5..}
- 混合:{'total':81,row:[{'bid':1,'bname':'java入门到入土'},{'bid':2,'bname':'php入门到入土'}...]}
二、SpringMVC中JSON的配置环境
1.在pom.xl中导入JSON依赖
<!--<json.version>2.9.3</json.version>-->
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
2.在spring核心控制器中配置JSON消息转换器
<!--但是,从spring3.1开始DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter的使用已经过时-->
<!--spring3.1开始我们应该用RequestMappingHandlerMapping来替换DefaultAnnotationHandlerMapping,-->
<!--spring3.1开始我们应该用用RequestMappingHandlerAdapter来替换AnnotationMethodHandlerAdapter-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!--处理中文乱码以及避免IE执行AJAX时,返回JSON出现下载文件-->
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
三、Controller返回多种类型的JSON数据
1.返回List<T>类型的JSON数据
/**
* 返回List<T>类型的Json数据
* @param book
* @param req
* @return
*/
@RequestMapping("/queryListBook")
@ResponseBody
public List<Book> queryListBook(Book book,HttpServletRequest req){
PageBean pageBean=new PageBean();
pageBean.setRequest(req);
List<Book> books=bookService.queryBookPager(book,pageBean);
return books;
}
2.返回Map类型的JSON数据
/**
* 返回Map类型的JSON数据
* @param bid
* @return
*/
@RequestMapping("/querySingleMap")
@ResponseBody
public Map<String,Object> querySingleMap(Integer bid){
return bookService.querySingleMap(bid);
}
3.返回List<Map<String,Object>>类型的JSON数据
/**
* 返回List<Map<>>类型的JSON数据
* @return
*/
@RequestMapping("/queryMapList")
@ResponseBody
public List<Map<String,Object>> queryMapList(){
return bookService.queryMapList();
}
4.返回对象类型的JSON数据
/**
* 返回对象类型的JSON数据
* @param bid
* @return
*/
@RequestMapping("/querySingleBook")
@ResponseBody
public Book querySingleBook(Integer bid){
Book book=bookService.selectByPrimaryKey(bid);
return book;
}
5.返回String类型的JSON数据
/**
* 返回String类型的Json数据
* @return
*/
@RequestMapping("/queryStr")
@ResponseBody
public String queryStr(){
return "book/bookList";
}
6.返回混合类型的JSON数据
/**
* 返回混合类型的Json数据
* @param book
* @param req
* @return
*/
@RequestMapping("/queryListBook1")
@ResponseBody
public Map<String,Object> queryListBook1(Book book,HttpServletRequest req){
PageBean pageBean=new PageBean();
pageBean.setRequest(req);
List<Book> books=bookService.queryBookPager(book,pageBean);
Map<String,Object> json=new HashMap<>();
json.put("total",pageBean.getTotal());
json.put("rows",books);
return json;
}
四、常用注解
1.@ResponseBody
作用:绕开视图解析器,将java对象转为json格式的数据。
2.@JsonIgnore
作用:用来忽略某些字段,可以用在变量或者Get方法上,用在Set方法时,和变量效果一样。这个注解一般用在我们要忽略的字段上。
3.@JsonFormat
作用:帮我们完成格式转换
4.@JsonProperty
作用:在返回实体类的JSON数据格式时,给此字段取别名 只在返回实体类时有效