在spring 3中,如果Jackson (json处理器)已经存在于项目的类路径,你可以打开 “mvc:annotation-driven” 来支持对象与json的转换。
在这个教程里,主要介绍怎样从spring mvc中输出json数据。
主要用到的技术如下:
Spring 3.0.5.RELEASE
Jackson 1.7.1
JDK 1.6
Eclipse 3.6
Maven 3
1. 项目依赖
为了在spring mvc中使用json,你需要包含Jackson依赖项。
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>dehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.1</version>
</dependency>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
2. 模型Model
一个简单的POJO, 接下来我们将把这个对象转换为json格式。
package mon.model;
public class Shop {
String name;
String staffName[];
//getter and setter methods
}
3.控制器 Controller
在控制器中方法的返回值前面加上 “@ResponseBody” , 在 Spring documentation中介绍比较少
据我了解,当spring发现
Jackson 类库存在于类路径中
“mvc:annotation-driven” 已经打开
Return method annotated with @ResponseBody
它就会自动的处理json转换。
package ntroller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import mon.model.Shop;
@Controller
@RequestMapping(“/kfc/brands”)
public class JSONController {
@RequestMapping(value=“{name}”, method = RequestMethod.GET)
public @ResponseBody Shop getShopInJSON(@PathVariable String name) {
Shop shop = new Shop();
shop.setName(name);
shop.setStaffName(new String[]{“mkyong1”, “mkyong2”});
return shop;
}
}
4. mvc:annotation-driven
在你的spring配置文件中打开“mvc:annotation-driven” .
<beans xmlns=“schema/beans”
xmlns:context=“schema/context”
xmlns:mvc=“schema/mvc”
xmlns:xsi=“/2001/XMLSchema-instance”
xsi:schemaLocation=“
schema/beans
schema/beans/spring-beans-3.0.xsd
schema/context
schema/context/spring-context-3.0.xsd
schema/mvc
schema/mvc/spring-mvc-3.0.xsd”>
<context:component-scan base-package=“ntroller” />
<mvc:annotation-driven />
</beans>