ajax提交的Json格式和servlet,springmvc

在逐渐接触java web的过程中,发现json格式是比较重要的一种,然后想写下如何用ajax提交json数据并在后台进行处理,先说下ajax提交可以用到jquery这个js文件来帮助写提交数据的函数,格式给个大概的模板
  function add(){
   $.ajax({
    type:"post",
    url:"JsonServlet",
    data: JSON.stringify({ 'userName': $("#userName").val(), 'userPassword': $("#userPassword").val() }),
    async:true,
    success:function(data){
       //返回的data是如果是单个实体类则可以调用里面的属性,如果是map可以按照键值对,list的话可以用ajax的each循环遍历值如下面的例子可以用jquery,html()方法来做数据回显,具体看jquery语法

         var obj=data.user.booklist
         
         $(obj).each(function(index){
          var val=obj[index]; 
    var Name=val.bookName;  
    val Support=val.bookSupport;
          alert(Name+);
      $("#1").html($(obj).get(0).bookName+$(obj).get(0).bookSupport);  
          $("#2").html($(obj).get(1).bookName+$(obj).get(1).bookSupport);
         })
        }
       });
      }
type说明ajax提交方式,url是提交给后台处理的地址,data是传输到后台的数据,JSON.stringify()这个方法可以把字符串转为json对象来给后台接受数据,async是同步异步的,默认为true异步,所谓异步就是你一个网页有多个ajax函数(多个请求),你提交一个请求你不用等服务器处理完成后才能进行下一个请求,success为服务器成功处理后的结果,一般通过response响应获取PrintWriter输出流来返回某些东西,可以是对象,集合,字符串。jquery常用的方法如each(),get()等等可以了解下以便数据回显,ajax有一个dataType的属性,他是说明返回的数据形式是怎么样子的,如果在后台设置为json的话如: response.setContentType("application/json");  就不用写dataType,那么后台servlet是如何接受的呢,如果用gson的话可以参考下这个http://blog.csdn.net/wuyou1336/article/details/52046026
我看别人的文章找到一种通用的方法,就是通过获得请求的bufferReader来读取data的内容,然后可以通过StringBuffer这个类来接受读获得数据
StringBuffer json=new StringBuffer();
 BufferedReader reader=request.getReader();
 String line=null;
 while((line=reader.readLine())!=null) {
  json.append(line);
 }
 String s=json.toString();
这样把json数据转为字符串类型就可以读取,然后可以用gson的fromJson把字符串转为实体类,toJson则是把实体类转为json格式,再通过response.getwriter.write向客户端写某些对象或者字符串。
然后到ssm框架,springmvc自带一个@ResponseBody可以把返回的对象直接转为json格式传输,还是要记得把返回数据的格式设为json,可以通过ajax或着后台进行处理,@RequestBody就是会把json数据直接转为一个相应pojo用来使用,就是自动封装成一个实体类,但要加载一个jackson的依赖包才可以返回json数据,以上是个人的观点,有错很正常我也会逐步改善
public  @ResponseBody User test(HttpServletRequest request,HttpServletResponse response,@RequestBody Map<String,Object> p) throws IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html; charset=utf-8");
  for(String a:p.keySet()) {
   System.out.println(a.toString());
  }
  
  return null;}
这是一个例子,@RequestBody就会把你的json数据封装成一个你想要的类,如map,pojo,list等等(如果封装成功的话).
 

猜你喜欢

转载自blog.csdn.net/weixin_37703281/article/details/78714745