(二)SpringMVC使用之@ResponseBody
一、SpringMVC前端返回后台的参数
(1)@RequestParam 从请求参数中获取参数,相当于request.getParameter(" ")
@RequestMapping(value = "/student2")
public String parseParams(@RequestParam(value = "nameVal", required = true) String name){
XXX;
}
(2)@PathVariable 地址占位符
(3)@RequestBody 取request这个消息体(可以组装json对象)
二、注解@ResponseBody的作用
作用:后端给前端的返回类型不是String或者ModelAndView格式的数据
前台json数据 ---> 后端解析(@RequestBody注解、@PathVariable注解、@ RequestParam注解、request.getParameter 等方式 ) ---> 返回数据到前端(常见4种返回类型:类对象、列表、键值对、字符串)
三、四种常见的@ResponseBody返回类型及处理方式
其中,实体类Student有3个属性:
public class Student
{
private Integer age;
private String name;
private Integer id;
}
前端AJAX请求 | 后端处理后,返回数据格式 | 前端处理方式 |
通常以json传递 | 类对象,Student | data.name |
同上 | 列表, List<Student> |
|
同上 | 键值对,Map<"mapStu",Student> | data.mapStu.name |
同上 | 字符串,"strStu" | data == "strStu" |
四、前端AJAX的使用
type: 请求方式(post或get)默认为get。 put和delete也可以使用,但仅部分浏览器支持。
cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
dataType:要求为String类型的参数,预先返回服务器的数据类型。如不指定,JQuery将自动根据http包mime信息返回responseXML或者responseText,并作为回调函数参数传递,可用类型如下:
xml:返回XML文档,可用JQuery处理;
json:返回JSON数据;
script:返回纯文本JavaScript代码,不会自动缓存结果,除非设置了cache参数;
html:返回纯HTML信息,包含的script会在插入DOM时执行;
text:返回纯文本符号
data:
要求为Object或者String类型的参数,发送到服务器,如果不是则自动转换成字符串格式。
示例:
前端AJAX请求:
function testAjax(){
var urls = "${pageContext.servletContext.contextPath}/th/student5";
var params = JSON.stringify( [ { name : "zhangWen", age : "16", id : 4 },
{ name : "zhangWe2", age : "23", id : 5 } ] );
$.ajax({
type : 'POST',
url:urls,
data: params,
dataType:"json",
cache : false,
contentType : "application/json; charset=utf-8",
error : function(text,errorThrown){
alert("错误请求信息: " + text);
},
success : function(data,text){
alert("请求成功==》姓名 " +data.name+ " ; "+data.age+" ; "+data.id);
}
});
}
后端代码:
实体类Student
public class Student
{
private Integer age;
private String name;
private Integer id;
}
@RequestMapping(value = "/student5", method = { RequestMethod.POST }, produces = "application/json;charset=utf-8")
@ResponseBody
public Student jsonDataReq(@RequestBody Student[] stu)
{
Student st = new Student();
for (Student item : stu)
{
st.setName(item.getName());
st.setId(item.getId());
st.setAge(item.getAge());
String jsonObj = JSON.toJSONString(item);
System.out.println(jsonObj);
}
// 将数据返回前端
return st;
}