Spring 3 MVC JSON Sample
2014-02-22 22:24
369 查看
Spring Framework 3 对 JSON的支持很不错。
这个例子程序和以前一样,前端为html、javascript,这次后端改为使用spring framework 3.2.4,前后端通过ajax交换json数据,这个例子比只使用servlet 3更简洁,当然配置更复杂一些。
完整的代码和配置下载。
配置
要使用spring framework,首先要在WEB-INF/web.xml中配置spring的DispatcherServlet,由其来接管映射的URL请求,之后就进入spring framework的处理流程。
web.xml
如果不配置的DispatcherServlet的初始化参数contextConfigLocation,则spring framework会读取WEB-INF/<servlet-name>-servlet.xml作为其context参数文件,在这个配置里,这个文件为spring-servlet.xml,其内容如下:
其中
表示从包net.openwares.test里面自动扫描使用注解标示的组件,比如@RqeustMapping,@RequestBody等注解的组件。
不过这个地方存在一点问题,spring对jar包的扫描有特殊的要求,用jar -cvf 命令创建的jar包,spring扫描不到其中的组件,而不打包使用层次文件路径则没有问题,这里的路径是WEB-INF/classes/net/openwares/test/。使用eclipse打包时有个选项add directory entries,勾选这个选项打出来的包就可以被spring扫描到。现在还没发现如何用jar命令打包才可以让spring扫描到。
可以将spring framework不处理的其他资源请求路由到容器的default servlet,这样容器就可以继续处理这些请求,而不是被spring framework拦截掉。
支持注解,比如@RequestMapping,@PathVariable等。
对于这个例子,这个配置就够了。现在spring framework朝着零配置方向又进一步,在servlet 3.0+环境下,也可以不用xml而使用java代码来完成如上配置。
代码
前端index.html只是改一下请求的url就可以了
var url = “/springjson/ajaxcalc”;
后端SpringJson.java代码:
说明
只要前端ajax请求将Content-Type设置为application/json,则spring会自动的将请求内容映射到@RequestBody修饰的VO对象,
将@ResponseBody修饰的VO对象转换为返回的json数据。spring使用HttpMessageConverters来转换数据,
支持json,xml等多种数据类型,还以自定义转换接口。中间如有数据类型转换可能会出现转换问题。
打包为spingjson.war,部署后访问URL http://127.0.0.1/springjson/ajaxcalc 依赖
spring使用jackson来操作json数据,因此需要下载jackson jar包,spring 3.2.4支持jackson 2,直接下载最新的jackson包丢到lib目录即可,当前为这个三个文件:
jackson-core-2.2.3.jar
jackson-annotations-2.2.3
jackson-databind-2.2.3.jar
spring使用apache commons logging组件来输出日志,因此需要依赖包
commons-logging-1.1.3.jar
spring framework现在拆分了jar,不再提供单一的一个大jar包。此样例程序需要依赖以下spring包:
spring-core-3.2.4.RELEASE.jar //核心包,所有的spring程序都需要
spring-beans-3.2.4.RELEASE.jar //bean管理,依赖注入等核心功能
spring-context-3.2.4.RELEASE.jar //基础支持包
spring-expression-3.2.4.RELEASE.jar //此包必须,否则spring无法加载context配置文件,从而无法完成初始化
spring-web-3.2.4.RELEASE.jar //servlet支持
spring-webmvc-3.2.4.RELEASE.jar //MVC支持
这个例子程序和以前一样,前端为html、javascript,这次后端改为使用spring framework 3.2.4,前后端通过ajax交换json数据,这个例子比只使用servlet 3更简洁,当然配置更复杂一些。
完整的代码和配置下载。
配置
要使用spring framework,首先要在WEB-INF/web.xml中配置spring的DispatcherServlet,由其来接管映射的URL请求,之后就进入spring framework的处理流程。
web.xml
不过这个地方存在一点问题,spring对jar包的扫描有特殊的要求,用jar -cvf 命令创建的jar包,spring扫描不到其中的组件,而不打包使用层次文件路径则没有问题,这里的路径是WEB-INF/classes/net/openwares/test/。使用eclipse打包时有个选项add directory entries,勾选这个选项打出来的包就可以被spring扫描到。现在还没发现如何用jar命令打包才可以让spring扫描到。
对于这个例子,这个配置就够了。现在spring framework朝着零配置方向又进一步,在servlet 3.0+环境下,也可以不用xml而使用java代码来完成如上配置。
代码
前端index.html只是改一下请求的url就可以了
var url = “/springjson/ajaxcalc”;
后端SpringJson.java代码:
package net.openwares.test; import java.io.Writer; import java.io.IOException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.stereotype.Component; import org.springframework.beans.factory.annotation.Autowired; @Component class Attender { private int augend, addend; public Attender(){} public int getAugend(){ return augend; } public void setAugend(int augend){ this.augend = augend; } public int getAddend(){ return addend; } public void setAddend(int addend){ this.addend = addend; } } @Component class Outcome { private int result; public Outcome(){} public int getResult(){ return result; } public void setResult(int result){ this.result = result; } } @Controller public class SpringJson { @Autowired private Outcome outcome; @RequestMapping("/ajaxcalc") public @ResponseBody Outcome getResult(@RequestBody Attender attender){ outcome.setResult(attender.getAugend() + attender.getAddend()); return outcome; } }
说明
只要前端ajax请求将Content-Type设置为application/json,则spring会自动的将请求内容映射到@RequestBody修饰的VO对象,
将@ResponseBody修饰的VO对象转换为返回的json数据。spring使用HttpMessageConverters来转换数据,
支持json,xml等多种数据类型,还以自定义转换接口。中间如有数据类型转换可能会出现转换问题。
打包为spingjson.war,部署后访问URL http://127.0.0.1/springjson/ajaxcalc 依赖
spring使用jackson来操作json数据,因此需要下载jackson jar包,spring 3.2.4支持jackson 2,直接下载最新的jackson包丢到lib目录即可,当前为这个三个文件:
jackson-core-2.2.3.jar
jackson-annotations-2.2.3
jackson-databind-2.2.3.jar
spring使用apache commons logging组件来输出日志,因此需要依赖包
commons-logging-1.1.3.jar
spring framework现在拆分了jar,不再提供单一的一个大jar包。此样例程序需要依赖以下spring包:
spring-core-3.2.4.RELEASE.jar //核心包,所有的spring程序都需要
spring-beans-3.2.4.RELEASE.jar //bean管理,依赖注入等核心功能
spring-context-3.2.4.RELEASE.jar //基础支持包
spring-expression-3.2.4.RELEASE.jar //此包必须,否则spring无法加载context配置文件,从而无法完成初始化
spring-web-3.2.4.RELEASE.jar //servlet支持
spring-webmvc-3.2.4.RELEASE.jar //MVC支持
相关文章推荐
- SpringMVC @RequestBody 接收Json数组对象
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC+FastJson+Swagger集成完整示例
- 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1
- spring3.0.5的mvc使用(exception,json,annotation,xml,upload/download)
- Spring Boot Spring MVC Rest json输出日期为时间戳的问题
- 如何让Spring MVC Controller的同一个方法,根据逻辑判断返回JSON或者HTML视图?
- spring3 mvc json问题
- SpringMVC @RequestBody接收Json对象字符串
- 解决spring-mvc @responseBody注解返回json 乱码问题
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC@ResponseBody返回JSON乱码
- Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
- Ajax+SpringMVC传递JSON数组
- Spring WebMVC 4.1.4返回json时导致的 406(Not Acceptable)
- Spring 3 MVC and JSON example
- 解决spring-mvc @responseBody注解返回json 乱码问题
- Spring mvc json null
- SpringMVC @RequestBody接收Json对象字符串
- IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践