运行效果
开发环境
- IDEA 2017
- JDK 1.8
- Spring 4.2.2.RELEASE
- Jackson 2.8.5
项目结构
1 | └─main |
因为是一个小 demo,所以代码尽量简单,只有一个 Controller 和 Domain 对象
依赖
pom.xml
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
只需要 SpringMVC 和 Jackson 依赖即可
Domain
1 | package com.smart.domain; |
Controller
1 | package com.smart.controller; |
别忘了给 Controller 的方法添加上 @ResponseBody
注解,这样才能返回 JSON
ApplicationContext.xml
smart-context.xml
1 |
|
Spring 的配置文件也是很简单,关键在于要加上 <mvc:annotation-driven/>
web.xml
1 | <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" |
在 web.xml
指定 ApplicationContext 的文件位置即可
运行结果
URL http://localhost:8080/chapter2/testJavaBean?name=我是中文
进阶
一般在真实开发的时候,JSON 数据一般是这样的
- 请求成功的时
1 | { |
- 请求失败时
1 | { |
从上面可以看到,服务器传回来的 JSON 格式是这样
1 | { |
而且,如果 JSON 数据中的值为 null
的话,就不传回来。对于这样的需求要怎么实现呢?
APIResult
首先按照服务器的 JSON 格式,定义一个 JavaBean,至于 data
部分用 Object
表示
1 | package com.smart.domain; |
对于 null
字段不显示的需求,只需要在 ApplicationContext 配置文件定义即可。注意了,这个定义是全局生效的
1 | <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"> |
最后就是修改一下 Controller 的代码,使用 APIResult
将数据包装起来
1 | package com.smart.controller; |
URL: http://localhost:8080/chapter2/testNg
返回
1 | { |
URL http://localhost:8080/chapter2/testMap?name=Admin
返回
1 | { |
URL http://localhost:8080/chapter2/testJavaBean?name=Admin
返回
1 | { |
对应SpringBoot框架的做法
如果是 SpringBoot 框架来开发的话,更简单了,不需要写一堆的配置文件。
Application
1 | package com.smart; |
只需要一个使用 @SpringBootApplication
讲某一个类注解为启动类即可,不需要写 ApplicationContext.xml 了
Controller
相反,Controller 只需要使用 @RestController
注解即可,可以将方法上的 @ResponseBody
注解去掉
1 | package com.smart.controller; |
对于JSON的格式要求:
- 去除 Null 字段
- 格式化打印
只需要在 src/main/resources/
文件夹中创建一个 application.properties
文件,添加如下内容
1 | spring.jackson.serialization.indent-output=true |