出处:http://blog.csdn.net/yh_zeng2 http://blog.csdn.net/yh_zeng2/article/details/77074037
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 –>
<!-- 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>
<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}”);
- }
- }
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}");
}
}
项目demo:https://github.com/zengyh/MavenSpringMvcDemo.git
<script>
$(".MathJax").remove();
</script>
<script type="text/javascript" src="//static-blog.csdn.net/mdeditor/public/res/bower-libs/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</div>