Spring MVC返回JSON数据

出处: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包:

  1. <!– JACKSON包,让Spring MVC支持JSON视图的解析以及返回JSON数据进行呈现 –>  
  2. <!– jackson-databind-版本号.jar 依赖以下两个包,也会自动添加进来   
  3.      jackson-annotations-版本号.jar   
  4.      jackson-core-版本号.jar   
  5.       例如:jackson-databind-2.5.4.jar,就依赖jackson-annotations-2.5.0.jar和jackson-core-2.5.4.jar这两个包  
  6. >  
  7. <dependency>  
  8.     <groupId>com.fasterxml.jackson.core</groupId>  
  9.     <artifactId>jackson-databind</artifactId>  
  10.     <version>2.5.4</version>  
  11. </dependency>  
  12. <!– 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视图解析器:

  1.    <bean class=“org.springframework.web.servlet.view.ContentNegotiatingViewResolver”>  
  2.     <property name=“order” value=“1” />  
  3.     <property name=“defaultViews”>  
  4.         <list>  
  5.             <!– Json视图 –>  
  6.             <bean class=“org.springframework.web.servlet.view.json.MappingJackson2JsonView”/>  
  7.         </list>  
  8.     </property>  
  9. </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:

  1. package edu.mvcdemo.controller;  
  2.   
  3. import javax.servlet.http.HttpServletResponse;  
  4. import org.springframework.context.annotation.Scope;  
  5. import org.springframework.http.HttpStatus;  
  6. import org.springframework.http.ResponseEntity;  
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.PathVariable;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10. import org.springframework.web.bind.annotation.RequestMethod;  
  11. import org.springframework.web.bind.annotation.ResponseBody;  
  12. import edu.mvcdemo.model.User;  
  13.   
  14. /** 
  15.  * @编写人: yh.zeng 
  16.  * @编写时间:2017-8-7 下午10:12:26 
  17.  * @文件描述: Controller返回JSON数据的demo 
  18.  */  
  19. @Controller  
  20. @Scope(value=“singleton”//只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
  21. public class ReturnJsonController {  
  22.       
  23.     /** 
  24.      * 方式一:使用@ResponseBody标注 
  25.      * @param userId 
  26.      * @return 
  27.      */  
  28.     @ResponseBody  
  29.     @RequestMapping(value=“/jsontype/view1/users/{userId}”, method=RequestMethod.GET)  
  30.     public User getUserInJson(@PathVariable(“userId”) Integer userId){  
  31.         User user = new User();  
  32.         user.setNo(userId);  
  33.         user.setUserName(”user”+userId);  
  34.         return user;  
  35.     }  
  36.       
  37.     /** 
  38.      * 方式二:使用ResponseEntity 
  39.      * @param userId 
  40.      * @return 
  41.      */  
  42.     @RequestMapping(value=“/jsontype/view2/users/{userId}”, method=RequestMethod.GET)  
  43.     public ResponseEntity<User> getUserInJson2(@PathVariable(“userId”) Integer userId){  
  44.         User user = new User();  
  45.         user.setNo(userId);  
  46.         user.setUserName(”user”+userId);  
  47.         return new ResponseEntity<User>(user, HttpStatus.OK);  
  48.     }  
  49.       
  50.     /** 
  51.      * 方式三:使用HttpServletResponse对象返回JSON数据 
  52.      * @param userId 
  53.      * @param response 
  54.      * @throws Exception 
  55.      */  
  56.     @RequestMapping(value=“/jsontype/view3/users/{userId}”, method=RequestMethod.GET)  
  57.     public void getUserInJson3(@PathVariable(“userId”) Integer userId, HttpServletResponse response) throws Exception{  
  58.         response.setContentType(”application/json”);  
  59.         response.getWriter().println(”{\”no\”:”+userId+“,\”userName\”:\”user”+userId+“\”,\”age\”:null}”);  
  60.     }  
  61.   
  62. }  
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>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值