西安网站建设公司十强,网站建设需要懂什么语言,微信公众号怎么进行网站建设,制作ppt的软件手机版文章目录一、传统同步业务数据响应1. 请求资源转发2. 请求资源重定向3. 响应模型数据4. 直接回写数据二、前后端分离异步业务数据响应一、传统同步业务数据响应 Spring响应数据给客户端#xff0c;主要分为两大部分#xff1a; ⚫ 传统同步方式#xff1a;准备好模型数据主要分为两大部分 ⚫ 传统同步方式准备好模型数据在跳转到执行页面进行展示此方式使用越来越少了基于历史原因一些旧项目还在使用 ⚫ 前后端分离异步方式前端使用Ajax技术Restful风格与服务端进行Json格式为主的数据交互目前几乎都是此种方式了。 传统同步业务在数据响应时SpringMVC又涉及如下四种形式 ⚫ 请求资源转发 ⚫ 请求资源重定向 ⚫ 响应模型数据 ⚫ 直接回写数据给客户端 1. 请求资源转发 2. 请求资源重定向 3. 响应模型数据 响应模型数据本质也是转发在转发时可以准备模型数据 GetMapping(/forward5)
public ModelAndView forward5(ModelAndView modelAndView){// 准备JavaBean模型数据User user new User();user.setUsername(haohao);// 设置模型modelAndView.addObject(user,user);// 设置视图modelAndView.setViewName(/index.jsp);return modelAndView;
}4. 直接回写数据 直接通过方法的返回值返回给客户端的字符串但是SpringMVC默认的方法返回值是视图可以通过ResponseBody 注解显示的告知此处的返回值不要进行视图处理是要以响应体的方式处理的 GetMapping(/response2)
ResponseBodypublic String response2() throws IOException {return Hello haohao!;
}二、前后端分离异步业务数据响应 其实此处的回写数据跟上面回写数据给客户端的语法方式一样只不过有如下一些区别 ⚫ 同步方式回写数据是将数据响应给浏览器进行页面展示的而异步方式回写数据一般是回写给Ajax引擎的即谁访问服务器端服务器端就将数据响应给谁 ⚫ 同步方式回写的数据一般就是一些无特定格式的字符串而异步方式回写的数据大多是Json格式字符串 回写普通数据使用ResponseBody标注方法直接返回字符串即可此处不在说明 回写Json格式的字符串即将直接拼接Json格式的字符串或使用工具将JavaBean转换成Json格式的字符串回写 GetMapping(/response3)
ResponseBody
public String response3(HttpServletResponse response) {return {\username\:\haohao\,\age\:18};
}GetMapping(/response4)
ResponseBody
public String response4() throws JsonProcessingException {// 创建JavaBeanUser user new User();user.setUsername(haohao);user.setAge(18);// 使用Jackson转换成json格式的字符串String json new ObjectMapper().writeValueAsString(user);return json;
}在讲解SringMVC接收请求数据时客户端提交的Json格式的字符串也是使用Jackson进行的手动转换成JavaBean 当我们使用了RequestBody时直接用JavaBean就接收了Json格式的数据原理其实就是SpringMVC底层帮我们做了转换此处ResponseBody也可以将JavaBean自动给我们转换成Json格式字符串回响应 GetMapping(/response5)
ResponseBody
public User response5() throws JsonProcessingException {// 创建JavaBeanUser user new User();user.setUsername(haohao);user.setAge(18);// 直接返回User对象return user;
}ResponseBody注解使用优化在进行前后端分离开发时Controller的每个方法都是直接回写数据的所以每个方法上都得写ResponseBody可以将ResponseBody写到Controller上那么该Controller中的所有方法都具备了返回响应体数据的功能了 Controller
ResponseBody
public class UserController{GetMapping(/response7)public ResultInfo response7() {// 省略其他代码return info;}GetMapping(/response5)public User response5() throws JsonProcessingException {//省略其他代码return user;}// ... 省略其他方法 ...
}进一步优化可以使用RestController替代Controller和ResponseBodyRestController内部具备的这两个注解的功能 RestController
public class UserController{GetMapping(/response7)public ResultInfo response7() {// 省略其他代码return info;}GetMapping(/response5)public User response5() throws JsonProcessingException {//省略其他代码return user;}// ... 省略其他方法 ...
}