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

【SpringMVC】【HttpMessageConverter】【文件的上传和下载】【拦截器】【异常处理】【学习笔记】Spring开学很好学1.5

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

【SpringMVC】【HttpMessageConverter】【文件的上传和下载】【拦截器】【异常处理】【学习笔记】Spring开学很好学1.5

文章目录

HttpMessageConverter

1、@RequestBody2、RequestEntity3、@ResponseBody4、SpringMVC处理json5、SpringMVC处理ajax6、@RestController 文件的上传和下载

1、文件下载2、文件上传 拦截器

1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器执行顺序 异常处理

1、基于配置2、基于注解

HttpMessageConverter

1、报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文

2、HttpMessageConverter提供了两个注解 @RequestBody,@ResponseBody

3、HttpMessageConverter提供了两个类型RequestEntity , ResponseEntity

1、@RequestBody

是控制器方法设置一个形参,使用@RequestBody进行标识

@RequestMapping(value = "/test")
public String test(@RequestBody String requestBody) {
    System.out.println("requestBody :" + requestBody);	// requestBody :username=123&password=123
    return "success";
}

    

这里是首页

用户名 :
密码 :
2、RequestEntity

是控制器方法设置一个形参,封装请求报文的一种类型

getHeaders()方法 获取请求头星系

getBody()方法 获取请求体信息

@RequestMapping(value = "/test")
public String test(RequestEntity requestEntity) {
    System.out.println("getHeaders : " + requestEntity.getHeaders());
    System.out.println("getBody : " + requestEntity.getBody());
    return "success";
}
getHeaders :[host:"localhost:8080", connection:"keep-alive", content-length:"29", cache-control:"max-age=0", sec-ch-ua:"" Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"", sec-ch-ua-mobile:"?0", sec-ch-ua-platform:""Windows"", upgrade-insecure-requests:"1", origin:"http://localhost:8080", user-agent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36", accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", sec-fetch-site:"same-origin", sec-fetch-mode:"navigate", sec-fetch-user:"?1", sec-fetch-dest:"document", referer:"http://localhost:8080/SpringMVCTest3/", accept-encoding:"gzip, deflate, br", accept-language:"zh-CN,zh;q=0.9", cookie:"Idea-d37c046e=ebb3202d-fa81-4695-90eb-6420b887c3b4; Idea-fcd81231=efa34384-1545-4b0c-b27c-c041c22f2f01", Content-Type:"application/x-www-form-urlencoded;charset=UTF-8"]

getBody : username=admin&password=admin
3、@ResponseBody

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

@ResponseBody
@RequestMapping(value = "/test")
public String test(){
    return "success";
}

这里,浏览器页面显示success

4、SpringMVC处理json

1、导入jackson依赖


    com.fasterxml.jackson.core
    jackson-databind
    2.12.1

2、在SpringMVC的核心配置文件中开启mvc的注解驱动,此时在HandlerAdaptor中会自动装配一个消 息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串


测试

@ResponseBody
@RequestMapping(value = "/test")
public User test(){
    return new User("admin","admin",1);
}

这里,浏览器页面显示{"username":"admin","password":"admin","id":1}

5、SpringMVC处理ajax





@RequestMapping("/testAjax")
@ResponseBody
public String testAjax(String username, String password){
    System.out.println("username:"+username+",password:"+password); // admin 123456
    return "hello,ajax";
}
6、@RestController

这是一个混合注解,相等于 @Controller注解 + 每个方法都添加@ResponseBody注解

文件的上传和下载 1、文件下载

ResponseEntity

用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文

@RequestMapping("/testDown")
public ResponseEntity testResponseEntity(HttpSession session) throws IOException {
    ServletContext servletContext = session.getServletContext();
    String realPath = servletContext.getRealPath("/static/img/1.jpg");
    FileInputStream is = new FileInputStream(realPath);
    byte[] bytes = new byte[is.available()];
    is.read(bytes);
    MultiValueMap headers = new HttpHeaders();
    headers.add("Content-Disposition","attachment;filename=1.jpg");
    HttpStatus statusCode = HttpStatus.OK;
    ResponseEntity responseEntity = new ResponseEntity<>(bytes,headers,statusCode);
    is.close();
    return responseEntity;
}
2、文件上传

1、请求为post

2、添加属性enctype="multipart/form-data"

头像 :

3、MultipartFile 对象可以获取文件相关信息

getOriginalFilename()方法 : 获取上传文件的文件名

transferTo()方法 : 上传到哪

UUID类 : 用于处理重名问题

@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;
    ServletContext servletContext = session.getServletContext();
    // 获取服务器中photo目录的路径
    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";
}

具体需要

导入依赖



拦截器

三个位置:控制器方法执行之前、控制器方法执行之后、渲染视图完毕之后

1、拦截器的配置

需要

1、实现HandlerInterceptor接口

2、SpringMVC的配置文件中进行配置 标签里,或者


    
    

3、通过mvc:mapping设置需要拦截的请求,通过mvc:exclude-mapping设置需要排除的请求,即不需要拦截的请求


    
        
        
        
    

2、拦截器的三个抽象方法

preHandle()

控制器方法执行之前执行

返回true放行,返回false拦截

postHandle()

控制器方法执行之后执行

afterComplation()

处理完视图和模型数据,渲染视图完毕之后执行

3、多个拦截器执行顺序

每个拦截器的preHandle()都返回true

此时,多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:

preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行

某个拦截器的preHandle()返回了false

返回false的preHandle()和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false 的拦截器之前的拦截器的afterComplation()会执行

异常处理 1、基于配置

标签

name=exceptionMappings时,处理异常跳转页面

name=exceptionAttribute时,将异常放到请求域中(value是request域中的k)

标签

键表示处理器方法执行过程中出现的异常

值表示若出现指定异常时,设置一个新的视图名称,跳转到指定页面


    
        
            error
        
    
    

2、基于注解

@ControllerAdvice注解 : 将当前类标识为异常处理的组件

@ExceptionHandler注解 : value属性,包含一个Class数组

Exception : 可以作为控制器方法的形参,被捕获到

@ControllerAdvice
public class ExceptionController {
    @ExceptionHandler(value = {ArithmeticException.class,NullPointerException.class})
    public String testException(Exception ex, Model model){
        model.addAttribute("ex",ex);
        return "error";
    }
}

End

最近和隔壁宿舍训练,确实被锤爆了,下面,我宣布,正式训练下路



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

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

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