注:以下我写的所有方法都在我的一个类中,类已经添加好@Controller注解
现在前后端分离,基本不再由后端来返回前端的静态页面,但此处还是分享一下用法,以防万一
如果想要返回静态页面,对应的类和方法就不能再用 @RestController 和 @ResponseBody 这两个注解了,后者表示不再返回静态页面,而是返回数据,前者功能包含后者
需使用@Controller注解(已在类中使用):
@RequestMapping("/index")
public String returnIndex(){
return "/index.html";
}
index.html是我早已定义好,且放在static目录下的静态页面
你若也想返回静态页面,在static目录下也需要提前放好对应的静态页面
@ResponseBody
@RequestMapping("/returnData")
public String returnData(){
return "返回视图需要的数据";
}
返回数据需使用@ResponseBody注解
该注解可以修饰类,也可以修饰方法
如果一个类中的所有方法返回的是数据,我们就把这个注解加在类上
@ResponseBody
@RequestMapping("/returnHtml")
public String returnHtml(){
return "返回HTML代码片段
";
}
直接在return处编写Html代码即可
返回JSON是目前最常用的返回数据的格式,对象等数据格式通过注解会自动转换为JSON
@ResponseBody
@RequestMapping("/returnJson")
public Person returnJson(){
Person person = new Person();
person.setId(1);
person.setName("zhangsan");
person.setAge(7);
return person;
}
@ResponseBody
@RequestMapping("/returnMap")
public Map returnMap(){
Map kv = new HashMap<>();
kv.put("k1","v1");
kv.put("k2","v2");
kv.put("k3","v3");
return kv;
}
返回数据的格式是String还是对象,是通过content-type决定的(可以手动指定)
手动指定:
设置@RequestMapping的produces参数,来手动指定返回的数据格式
@RequestMapping(value = "/example", produces = "application/json")
状态码不影响页面的展示
// 不常用,目前状态码通常还是用servlet设置的
@ResponseBody
@RequestMapping("/setStatus")
public String setStatus(HttpServletResponse response){
response.setStatus(401);//通常表示没有登录
return "设置状态码";
}
不常用,目前状态码通常还是用servlet设置的
@ResponseBody
@RequestMapping(value = "/r1",produces = "application/json;charset=utf-8")
// @RequestMapping(value = "/r1")
public String r1(HttpServletResponse response){
//设置header
response.setHeader("myhead","myhead");
return "{'OK':1}";
}
Header是HTTP的请求头
Header的详细介绍及获取方式