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<String> 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 解析器之一。

<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-databind</artifactId> 
<version>2.9.1</version> 
</dependency>
  • 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,配置和注解方式自行查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值