上虞网站设计百度app下载
一、返回静态页面
1.1**@RestController和@Controller**
想返回如下页面:
如果我们依旧使用原来的**@RestController**
可以看到的是仅仅返回了字符串。
此时将**@RestController改为@Controller**
可以看到这次返回的是html页面。
那么**@RestController和@Controller有什么区别和联系呢,这就要从MVC架构说起了,最开始设计View是要返回视图的,但随着技术的发展,前后端分离程度越来越高,Java后端开始只关注于后端的事务,不在关注前端的呈现,MVC也就发生了变化,View不在返回视图,而是返回显示视图时所需要的数据。所以前面使用的@RestController**其实返回的是数据。
@RestController = @Controller + @ResponseBody
@Controller :定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理。
@ResponseBody :定义返回的数据格式为⾮视图,返回⼀个text/html信息。
@ResponseBody既可以作为类注解也可以作为方法注解,如果标记在类上,那么表示该类中的所有方法都返回的是数据,如果一个类中既有返回视图的方法也有返回注解的方法,那么只用把**@ResponseBody**标注到对应方法上即可。
所以在有**@Controller注解的基础上添加@ResponseBody注解就等于直接标注@RestController**。
@Controller
@RequestMapping("/response")
public class ResponseController {//返回视图@RequestMapping("/responseHelloPage")public String requestHelloPage(){return "/hello.html";}//返回数据@RequestMapping("/responseHelloPage2")@ResponseBodypublic String requestHelloPage2(){return "返回数据";}
}
在标注了@Controller的类(表明该类中所有方法都返回视图)里,有一个需要返回数据的方法,但是该方法没有标注@ResponseBody,那么客户端在请求这个页面的时候会发生404错误:
@Controller
@RequestMapping("/response")
public class ResponseController {//返回视图@RequestMapping("/responseHelloPage")public String requestHelloPage(){return "/hello.html";}//返回数据@RequestMapping("/responseHelloPage2")//去掉@ResponseBody注解public String requestHelloPage2(){return "返回数据";}
}
1.2 返回Html片段
@RequestMapping("/returnHtml")@ResponseBodypublic String returnHtml() {return "<h1>Hello,HTML~</h1>";}
1.3 返回Json
@RequestMapping("/returnJson")@ResponseBodypublic HashMap<String, String> returnJson() {HashMap<String, String> map = new HashMap<>();map.put("Java", "Java Value");map.put("MySQL", "MySQL Value");map.put("Redis", "Redis Value");return map;}
通过Json返回一个对象:
@RequestMapping("/returnUser")@ResponseBodypublic User returnUser() {User user = new User("zhangsan",18,"未知");return user;}
1.4 设置状态码
SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码,通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置 。
@RequestMapping(value = "/setStatus")@ResponseBodypublic String setStatus(HttpServletResponse response) {response.setStatus(401);return "设置状态码成功";}