spring注解@ResponseBody处理ajax请求,json数据类型

最近做了一个spring+ajax 二级级联菜单,总是报各种错误,最后经过分析总结终于解决此问题,现在把问题展示给大家,以供分享。如有问题可以评论,肯定支持。

json需要引用的JSON包有:jackson-core-asl-1.9.13.jar,jackson-mapper-asl-1.9.13.jar,版本并不是固定的,只是这两个的版本一样就行了

         controller层:

@RequestMapping(value = "branchMap")
 @ResponseBody
 public List<Temp> getBranchMap(HttpServletRequest request) {
  String tmp = request.getParameter("organizid");
  Long id = Long.parseLong(tmp);
  return serviceManager.getBranchMap(id);
 }

         service层:

public List<Temp> getBranchMap(Long id) {
  return institutionsDao.getBranchMap(id);
 }

         dao层:(其中Temp是临时类,就是institutions类想要的字段组成的类)

 public List<Temp> getBranchMap(Long id) {
  List<Temp> lt = new ArrayList<Temp>();
  String sql = "select s.id,s.name from institutions s where s.parent=?";
  Session session = this.getSession();
  SQLQuery sqlQuery = session.createSQLQuery(sql);
  sqlQuery.setLong(0, id);
  sqlQuery.addScalar("id", Hibernate.LONG);
  sqlQuery.addScalar("name", Hibernate.STRING);
  sqlQuery.setResultTransformer(Transformers
    .aliasToBean(Institutions.class));
  List<Institutions> list = sqlQuery.list();
  if (list.size() <= 0) {
   Temp t = new Temp();
   t.setId(0L);
   if (id == -1) {
    t.setName("请先选择机构");
   } else {
    t.setName("该机构没有分支");
   }
   lt.add(t);
   return lt;
  }
  for (int i = 0; i < list.size(); i++) {
   Institutions ins = list.get(i);
   Temp t = new Temp();
   t.setId(ins.getId());
   t.setName(ins.getName());
   lt.add(t);
  }
  return lt;
 }

 

       jsp层:

       var val=$("#organization option:selected").val();
       $.ajax({
           type:"post",
           url:"${ctx}/account/user/branchMap",
           dataType:"json",
           async:false,
           data:{organizid:val},
           success:function(data){
            $("#branch").html("");
               $.each(data,function(i,item){
                   $("#branch").append("<option value="+item.id+">"+item.name+"</option>");
               });
           }
       });

然后在对应的spring-mvc.servlet.xml中添加配置

<!--
  @ResponseBody之后返回字符串中中文可能会出现乱码 因为sping
  mvc默认是text/plain;charset=ISO-8859-1,要支持中需做如下配置指定编码格式
 -->

 <bean
  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  <property name="messageConverters">
   <list>
    <bean
     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
     <property name="supportedMediaTypes">
      <list>
       <!--返回字符串格式json-->
       <value>application/json;charset=UTF-8</value>
      </list>
     </property>
    </bean>
   </list>
  </property>
 </bean>

 

 

只要后台查询查询的结果集是list<XXX>泛型的list集合然后把controller层标注上 @ResponseBody,前台调用此方法,并在$.ajax中标示为dataType:"json",  async:false,即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值