摘自:https://blog.csdn.net/weixin_42189604/article/details/82179660
以下是引用自己的,参数上述链接和下面部分
返回类型:ModelAndView, Model, ModelMap, Map, View, String, void。
package controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import pojo.User;
@Controller //类似Struts的Action
public class TestController {
@RequestMapping("test/login.do") // 请求url地址映射,类似Struts的action-mapping
public ModelAndView testLogin() {
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/login.jsp");
// 返回ModelAndView对象。
System.out.println("login1=======================");
return mv;
}
//post数据获取
@RequestMapping(value = "test/login2.do", method ={RequestMethod.POST})
public ModelAndView testLogin2(HttpServletRequest req, HttpServletResponse res) {
InputStream inputStream = null;
BufferedReader br = null;
try {
inputStream=req.getInputStream();
br =new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line="";
while((line=br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
// if(users!=null){
// System.out.println(users.get(0).getName());
// }
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login2=======================");
return mv;
}
//post的json字符串转对象获取
@RequestMapping(value = "test/login3.do", method ={RequestMethod.POST},
consumes = "application/json")
public ModelAndView testLogin3(@RequestBody User users) {
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
// if(users!=null){
// System.out.println(users.get(0).getName());
// }
System.out.println("name:"+users.getName()+"pwd:"+users.getPwd());
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login3=======================");
return mv;
}
@RequestMapping(value = "test/login4.do", method ={RequestMethod.POST})
public ModelAndView testLogin4(@RequestBody List<User> users) {
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
// if(users!=null){
// System.out.println(users.get(0).getName());
// }
for (int i = 0; i < users.size(); i++) {
System.out.println("name:"+users.get(i).getName()+"pwd:"+users.get(i).getPwd());
}
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
// mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login4=======================");
return mv;
}
//form action请求
@RequestMapping(value = "test/login5.do", method ={RequestMethod.POST})
public ModelAndView testLogin5(User users) {
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
// if(users!=null){
// System.out.println(users.get(0).getName());
// }
System.out.println("name:"+users.getName()+"pwd:"+users.getPwd());
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login5=======================");
return mv;
}
//@RequestParam的参数是get的请求参数,post同名参数无效
@RequestMapping(value = "test/login6.do", method ={RequestMethod.POST})
public ModelAndView testLogin6(@RequestParam(value="name",required=false) String name,
@RequestParam(value="pwd",required=false) String pwd ){
System.out.println("name:"+name+"pwd:"+pwd);
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login6=======================");
return mv;
}
//get数据获取
@RequestMapping(value = "test/login7.do", method ={RequestMethod.GET})
public ModelAndView testLogin7(HttpServletRequest req) {
String name=req.getParameter("name");
String pwd=req.getParameter("pwd");
req.getAttribute("pwd");
System.out.println("name:"+name+"pwd:"+pwd);
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
// 返回ModelAndView对象。
System.out.println("login7=======================");
return mv;
}
@RequestMapping(value = "test/login8.do", method ={RequestMethod.POST})
@ResponseBody
public ModelAndView testLogin8(String s) {
// 创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象
ModelAndView mv = new ModelAndView();
//添加模型数据 可以是任意的POJO对象
System.out.println("s:"+s);
mv.addObject("message", "Hello World!");
// 设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
mv.setViewName("/jsp/login.jsp");
System.out.println("login8======================");
return mv;
}
@RequestMapping(value = "test/login9.do", method ={RequestMethod.POST})
@ResponseBody
public User testLogin9(@RequestBody List<User> users) {
for (int i = 0; i < users.size(); i++) {
System.out.println("name:"+users.get(i).getName()+"pwd:"+users.get(i).getPwd());
}
System.out.println("login9=======================");
return users.get(0);
}
@RequestMapping(value = "test/login10.do", method ={RequestMethod.POST})
@ResponseBody//返回字符串只能是json或者xml格式(其他格式前台获取不到)
public String testLogin10(@RequestBody List<User> users,HttpServletResponse res) {
for (int i = 0; i < users.size(); i++) {
System.out.println("name:"+users.get(i).getName()+"pwd:"+users.get(i).getPwd());
}
res.setContentType("text/plain");
// String obj =JSONObject.fromObject(users.get(0)).toString();
String obj ="nihao";
System.out.println("login10=======================");
return obj;
}
}
function login2() {
var jsonObject = {
"name":"456",
"pwd":"789"
};
var jsons = JSON.stringify([{
"name":"321",
"pwd":"123"
},{
"name":"111",
"pwd":"222"
}]);
alert(jsons);
var jsonStr=JSON.stringify(jsonObject); //obj转string
var jsonObj=JSON.parse(jsonStr);//string转obj
alert(jsonStr);
$.ajax(
{
type: "post",
async: false,
url: "test/login10.do",
data: jsons,
contentType: "application/json; charset=utf-8", //社会自请求宝物类型
dataType: "text",//设置返回宝物类型
success: function (result) {
alert(result);
},
error: function (err) {
alert(555);
var jsonStr2=JSON.stringify(err)
alert(jsonStr2);
}
}
);
}
总结:
1. @ResponseBody;有则返回的是body数据,可以使对象、字符串、json、map、调用者直接获取这些数据。
如果没有@ResponseBody,则发挥的String是返回的下个也没的地址。
2. ajax的:contentType: "application/json; charset=utf-8", //社会自请求数据类型
dataType: "text",//设置返回数据类型