Spring MVC对JSON数据的返回提供了良好的支持,现在介绍三种方式:
- 使用@ResponseBody标注
- 使用ResponseEntity
- 使用HttpServletResponse对象返回JSON数据
注意:方式一和方式二,都依赖jackson-databind-版本号.jar、jackson-annotations-版本号.jar、jackson-core-版本号.jar 这几个jar包,也就是项目要导入这三个jar包,并且要定义Json视图解析器!!
例子:
pom.xml文件中添加以下内容,让项目添加所需要的相关的jackson包:
<!-- JACKSON包,让Spring MVC支持JSON视图的解析以及返回JSON数据进行呈现 -->
<!-- jackson-databind-版本号.jar 依赖以下两个包,也会自动添加进来
jackson-annotations-版本号.jar
jackson-core-版本号.jar
例如:jackson-databind-2.5.4.jar,就依赖jackson-annotations-2.5.0.jar和jackson-core-2.5.4.jar这两个包
-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.4</version>
</dependency>
<!-- end -->
Json视图解析器:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="defaultViews">
<list>
<!-- Json视图 -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</list>
</property>
</bean>
ReturnJsonController.java:
package edu.mvcdemo.controller;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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 edu.mvcdemo.model.User;
/**
* @编写人: yh.zeng
* @编写时间:2017-8-7 下午10:12:26
* @文件描述: Controller返回JSON数据的demo
*/
@Controller
@Scope(value="singleton") //只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton
public class ReturnJsonController {
/**
* 方式一:使用@ResponseBody标注
* @param userId
* @return
*/
@ResponseBody
@RequestMapping(value="/jsontype/view1/users/{userId}", method=RequestMethod.GET)
public User getUserInJson(@PathVariable("userId") Integer userId){
User user = new User();
user.setNo(userId);
user.setUserName("user"+userId);
return user;
}
/**
* 方式二:使用ResponseEntity
* @param userId
* @return
*/
@RequestMapping(value="/jsontype/view2/users/{userId}", method=RequestMethod.GET)
public ResponseEntity<User> getUserInJson2(@PathVariable("userId") Integer userId){
User user = new User();
user.setNo(userId);
user.setUserName("user"+userId);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
/**
* 方式三:使用HttpServletResponse对象返回JSON数据
* @param userId
* @param response
* @throws Exception
*/
@RequestMapping(value="/jsontype/view3/users/{userId}", method=RequestMethod.GET)
public void getUserInJson3(@PathVariable("userId") Integer userId, HttpServletResponse response) throws Exception{
response.setContentType("application/json");
response.getWriter().println("{\"no\":"+userId+",\"userName\":\"user"+userId+"\",\"age\":null}");
}
}