环境:
eclipse:
eclipse-jee-neon-R-win32
spring:
spring-framework-4.3.1
jackson:
jackson-core-2.8.0.jar
jackson-databind-2.7.0.jar
jackson-annotations-2.8.0.jar
以前用Spring mvc 返回 json,一般用 jackson-mapper-asl.jar
但 spring 4.x 貌似已不支持
jackson 相关的库,已移到这个项目:https://github.com/FasterXML
下面介绍如何在 spring 4.x 中返回 json
1、
先下载三个jar,缺一不可:
jackson-core-2.8.0.jar:
https://github.com/FasterXML/jackson-core/wiki
jackson-databind-2.7.0.jar:
https://github.com/FasterXML/jackson-databind/wiki
jackson-annotations-2.8.0.jar:
https://github.com/FasterXML/jackson-annotations/wiki
三个 jar 拖到项目的 WebContent/WEB-INF/lib 中
2、
把 <mvc:annotation-driven />
放到 spring 的配置文件,配置文件参考下面代码:
<?xml version= "1.0" encoding ="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.forum.www.controller" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:annotation-driven />
</beans>
3、
写要序列化成 json 的实体类,如下,必须有 get、 set 方法
User 类
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Phone> getPhones() {
return phones;
}
public void setPhones(List<Phone> phones) {
this.phones = phones;
}
private List<Phone> phones;
}
Phone 类
public class Phone {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
4、
在控制器的方法的返回值前加 @ResponseBody
控制器的方法如下:
@RequestMapping(value = "/json")
public @ResponseBody com.forum.www.viewmodel.User json(Model model) {
com.forum.www.viewmodel.User user = new com.forum.www.viewmodel.User();
user.setName("Michael Jackson");
List<Phone> listPhone = new ArrayList<Phone>();
Phone p1 = new Phone();
p1.setNum(10000);
Phone p2 = new Phone();
p2.setNum(20000);
Phone p3 = new Phone();
p3.setNum(30000);
listPhone.add(p1);
listPhone.add(p2);
listPhone.add(p3);
user.setPhones(listPhone);
return user;
}
最后结果如下