SpringMVC的Ajax请求与处理返回json数据
标签: Java 最后编辑:2020年6月11日
这里我用了三种形式返回 1、String 2、返回对象 3、 返回数组
一、以String方式返回
先看一下JavaScript代码
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(function(){ $("input[name=uname]").blur(function(){ var name = $(this).val(); $.ajax({ url:"ajaxC/checkName", type:"post", data:"uname="+name, datatype:"html", success:function(res){ $("#show").html(res) } }) }) $("button[name=bb]").click(function(){ $.ajax({ url:"ajaxC/checkName1", type:"post", datatype:"json", success:function(res){ alert(res.id+"----"+res.name+"----"+res.age) } }) }) $("button[name=btn]").click(function(){ var name = $(this).val(); $.ajax({ url:"ajaxC/checkName2", type:"post", datatype:"json", success:function(res){ $(res).each(function(i,u){ alert(u.id+"----"+u.name+"----"+u.age) }) } }) }) }) </script> <body> 用户名:<input name="uname"/><span id="show"></span><button name="bb" type="button" >获取单个信息</button><button name="btn" type="button" >获取集合信息</button> </body> </html>
这里我用Ajax异步请求到后台controller的控制台,第一个Ajax是判断用户名是否合法,第二个Ajax是接收后台传过来的对象数据,第三个是接收后台传过来的集合。
下面请看controller控制台代码
方法体上注解@ResponseBody,返回值类型还可以为Map,Array等。json处理器帮我们构造成JSON格式字符串,减少工作量。
package com.direct.controller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.direct.entity.UserInfo; @Controller @RequestMapping(value="/ajaxC") public class AjaxController { @RequestMapping(value="/checkName",method=RequestMethod.POST) @ResponseBody private String checkName(String uname) { if(uname!=null && uname.matches("[a-zA-Z0-9]{6,}")){ return "<span style='color: green;'>用户名可用</span>"; } return "<span style='color: red;'>用户名不可用</span>"; } @RequestMapping(value="/checkName1",method=RequestMethod.POST) @ResponseBody private UserInfo checkName1() { UserInfo user = new UserInfo(1, "战三", 18, "男"); return user; } @RequestMapping(value="/checkName2",method=RequestMethod.POST) @ResponseBody private List<UserInfo> checkName2() { List<UserInfo> ulist = new ArrayList<>(); ulist.add(new UserInfo(1, "战三", 18, "男")); ulist.add(new UserInfo(2, "战三2", 16, "男")); ulist.add(new UserInfo(3, "战三3", 12, "女")); ulist.add(new UserInfo(4, "战三4", 20, "男")); return ulist; } }
和普通的Ajax异步请求不同的是,SpringMVC不需要采用HttpServletResponse,只需要在方法上面加入注解 @ResponseBody 就可以了,加了之后需要在SpringMCV中配置处理ResponseBody返回编码格式和json转换,下面是处理ResponseBody返回编码格式和json转换的代码:
<!-- 处理ResponseBody返回编码格式 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- SpringMVC的json转换 --> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean> </list> </property> </bean>
PS:如果你的SpringMVC中配置的有处理静态资源的话<mvc:annotation-driven/> 需要将你处理ResponseBody返回编码格式的代码放在它的上面,不然还是会中文乱码。
原文链接:https://blog.csdn.net/Rm_and_Rf/article/details/90402912
说:来学习一下,应该用得上