出处: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包:
[html] view plain copy print ? <!– 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视图解析器: [html] view plain copy print ? <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: [java] view plain copy print ? 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>