spring之json数据的接受和发送

配置spring对json的注解方式。

     <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
     <property name="messageConverters">      
            <list >      
                <ref bean="mappingJacksonHttpMessageConverter" />      
            </list>      
        </property>
    </bean>
        
        <!-- 处理JSON数据转换的 -->  
    <bean id="mappingJacksonHttpMessageConverter"   
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
             <property name="supportedMediaTypes">    
            <list>    
                  <value>text/html;charset=UTF-8</value>  
                  <value>application/json; charset=UTF-8</value>  
            </list>    
        </property>    
    </bean>

 

Controller层使用了@requestBody和@responseBody注解

    /**
     * 接受json参数,返回json数据
     * @param area
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/getJson")
    public Map<String, Object> getJson(@RequestBody Area area, HttpServletRequest request,HttpServletResponse response) throws Exception{
        Map<String, Object> resultMap = new HashMap<String, Object>();
        try {
            System.out.println(area.getName());
            Area entity  = areaService.queryById(area.getId());
            responseOk(resultMap, entity);
        } catch (Exception e) {
            responseError(resultMap, Constant.FAILURE_MESSAGE, e);
        }
        return resultMap;
    }
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="/./resources/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">

    $(function(){
        $(".areajson").click(function(){
            var id=$(this).attr("id");
            var areaNmae=$(this).attr("areaNmae");
            var level=$(this).attr("level");
            var json = JSON.stringify({"id":id,"name":areaNmae,"level":level});//发送json数据
                jQuery.ajax({
                    url:"/area/getJson",
                    type:"post",
                    dataType:"json",
                    data:json,
                    contentType:'application/json;charset=UTF-8',//使用@requestBody必须设置contentType为json才能接受到Json数据
                    success:function(jsondata){
                        alert(jsondata.result.name);
                    }
            })
        })
        
    })
</script>
<title>Insert title here</title>
</head>
<body>
    #foreach($obj in $!list)
    <a href="javascript:;"><span id="$!obj.id" class="areajson" areaNmae="$!obj.name" level="$!obj.level">$!obj.name</span></a>
    #end 
</body>
</html>

我在这里遇到两个问题:1、用$.ajax({}),使用$一直报错,但是用jQuery就不报错,暂时还不知道原因。2、必须设置contentType,不然会报415错误。

这样就完成spring接受和返回json数据了。很简单的一个例子。

还有一种就是使用printWriter来返回json。

     response.setContentType("text/plain");
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        try {
            PrintWriter writer = response.getWriter();
            writer.print(Json.toJson(resultMap));
        } catch (IOException e) {
            e.printStackTrace();
        }

这里的Json是org.nutz.json.Json;将map转化为json数据。Json.toJson接受的参数是Object。所有也可以是数组、集合、对象。

 

post提交方式,以上面那种参数提交的话,他的请求体是这样的

 

如果以这种方式提交参数。

data:{"id":id,"name":areaNmae,"level":level}

可以看看Request Payload。

 

Json数据现在在APP或者是网站上都非常有用。得到json数据,要具体的数据只要一直.过去就行了。例如a.b.c.d就能获取到d的值。

转载于:https://www.cnblogs.com/hjy9420/p/4246005.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值