栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Mvc(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Mvc(二)

一.Restful风格

REST:Representational State Transfer,表现层资源状态转移。
REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

  • @PathVariable:接收请求路径中占位符的值,绑定到控制器的形参上
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Integer id) {
		return AjaxResult.success(userService.selectUserById(id));
    }
  • @RequestBody:获取请求体,需要在控制器方法设置一个形参;
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String requestBody){
		System.out.println("requestBody:"+requestBody); 
	    return "success";
}
输出结果:requestBody:username=admin&password=123456
  • RequestEntity

RequestEntity封装请求报文的一种类型,需要在控制器方法的形参中设置该类型的形参,当前请求的请求报文就会赋值给该形参,可以通过getHeaders()获取请求头信息,通过getBody()获取请求体信息

@RequestMapping("/testRequestEntity")
public String testRequestEntity(RequestEntity requestEntity){
	System.out.println("requestHeader:"+requestEntity.getHeaders());
	System.out.println("requestBody:"+requestEntity.getBody());
	return "success";
		}
  • @ResponseBody

用于标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器

@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){   
	 return "success";
 }
 结果:浏览器页面显示success
  • ResponseEntity:自定义响应报文的格式
    用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文,一般 用于实现文件的下载上传
二.Json数据

Json是一种数据交互格式
Jackson是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。是当前流行的 json 解析器之一。

 
com.fasterxml.jackson.core 
jackson-databind 
2.9.1 

  • Json的两种结构:
    1.对象结构:{key:value}
    2.数组结构:[value1,value2]
    @ResponseBody+jackson可以直接给浏览器返回对象;
    @RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了@Controller注解,并且为其中的每个方法添加了@ResponseBody注解
@RequestMapping("/testUp")public String testUp(MultipartFile photo, HttpSession session) throws 
IOException {   
	//获取上传的文件的文件名   
	  String fileName = photo.getOriginalFilename();
    //处理文件重名问题  
     String hzName = fileName.substring(fileName.lastIndexOf("."));
     fileName = UUID.randomUUID().toString() + hzName;
     //获取服务器中photo目录的路径    
     ServletContext servletContext = session.getServletContext();
     String photoPath = servletContext.getRealPath("photo");   
     File file = new File(photoPath);
     if(!file.exists()){
        file.mkdir();  
     }
     String finalPath = photoPath + File.separator + fileName;
     //实现上传功能
      photo.transferTo(new File(finalPath));    
      return "success";
      }

ServletContext.getRealPath(“photo”):从当前servlet 在tomcat 中的存放文件夹开始计算起的;
UUID:防止重名文件被覆盖

三.拦截器

SpringMVC中的拦截器用于拦截控制器方法的执行,SpringMVC中的拦截器需要实现HandlerInterceptor。需要在springmvc.xml中配置拦截路径,以及Intercepter的bean。
拦截器的三个抽象方法:

  • preHandle:控制器方法执行之前执行,其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法
  • postHandle:控制器方法执行之后执行postHandle()
  • afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()

多个拦截器的执行顺序:
a>若每个拦截器的preHandle()都返回true,此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行;
b>若某个拦截器的preHandle()返回了false,preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行。

四.异常处理器

SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver,HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver,配置和注解方式自行查询

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号