步骤一、在前端控制器配置文件中添加支持Json的Bean(本项目的文件名是spring-mvc-servlet.xml)
<!--支持Json的Bean,配置ViewResolver。 可以用多个ViewResolver。 使用order属性排序。 InternalResourceViewResolver放在最后。 --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="order" value="1" /> <property name="defaultViews"> <list> <!-- JSON View --> <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"> </bean> </list> </property> </bean>
步骤二、在pom.xml文件中注入生成Json所需要的依赖
<!-- 使用Json所依赖的jar包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version> </dependency>
步骤三、新建一个实体类(这是显示为Json数据的数据模型)
package com.springmvc.model; //注意:新建了一个包来装实体类 import java.util.List; /** * 用户实体类 */ public class User { private int id; //用户id private String name; //用户姓名 private String sex; //性别 private List<String> hobby; //爱好 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public List<String> getHobby() { return hobby; } public void setHobby(List<String> hobby) { this.hobby = hobby; } }
四、书写Controller中的生成Json数据的方法。
有两种方式实现:
方式1:
/** * 返回Json的示例:/hello/json1 * * 这里加了@ResponseBody注解,说明将List<User>作为响应体, * 将其响应为Json数据,因为已经在spring-mvc-servlet.xml进行配置 * */ @RequestMapping(value="json1",method=RequestMethod.GET) public @ResponseBody List<User> getUserInJson1(){ //填充所需返回的数据,本来应该是查询数据库,这里就写假数据了,因为重点不是在这 List<User> list=new ArrayList<User>(); for(int i=1;i<=3;i++){ User user=new User(); user.setId(i); user.setName("张三"+i); user.setSex("男"); List<String> hobbies=new ArrayList<String>(); hobbies.add("打篮球"+i); hobbies.add("唱歌"+i); hobbies.add("听音乐"+i); user.setHobby(hobbies); list.add(user); } return list; }
方式2:
/** * 返回Json的示例:/hello/json2/3 * * 注意:路径后面的参数是user的id,这种写法是由@PathVariable这个注解决定的。 * * 和写法1不同的是返回值没有注解了,变成了ResponseEntity<User> * * @param userId 需要查询的用户id * @return */ @RequestMapping(value="/json2/{userId}",method=RequestMethod.GET) public ResponseEntity<User> getUserInJson2(@PathVariable Integer userId){ //填充所需返回的数据,本来应该是查询数据库。这里就写假数据了,因为重点不是在这 User user=new User(); user.setId(userId); user.setName("张三"+userId); user.setSex("男"); List<String> hobbies=new ArrayList<String>(); hobbies.add("打篮球"+userId); hobbies.add("唱歌"+userId); hobbies.add("听音乐"+userId); user.setHobby(hobbies); //这里也应该new 一个响应体,因为返回的是这种类型,第一个参数是需返回的实体类,第二个参数是状态码 //当然,也可返回一个List<User>类型,需更换为:return new ResponseEntity<List<User>>(list, HttpStatus.OK); return new ResponseEntity<User>(user, HttpStatus.OK); }