首页 > 代码库 > spring之json数据的接受和发送

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的值。

spring之json数据的接受和发送