国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

這篇具有很好參考價(jià)值的文章主要介紹了【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

框架搭建

報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

1.?@RequestBody注解

2. RequestEntity類型

3. @RequestBody注解(常用)

重點(diǎn):SpringMVC處理json

重點(diǎn):SpringMVC處理ajax

重點(diǎn):@RestController注解

4.?ResponseEntity(實(shí)現(xiàn)文件的上傳下載)

文件下載

文件上傳

圖書推薦《Spring Cloud 微服務(wù)快速上手》


框架搭建

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>springmvc-thymeleaf006</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>springmvc-thymeleaf006 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring5</artifactId>
      <version>3.0.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--注冊(cè)過(guò)濾器:解決post請(qǐng)求亂碼問(wèn)題-->
    <filter>
        <filter-name>encode</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--指定字符集-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--強(qiáng)制request使用字符集encoding-->
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--強(qiáng)制response使用字符集encoding-->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!--所有請(qǐng)求-->
    <filter-mapping>
        <filter-name>encode</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--發(fā)送put、delete請(qǐng)求方式的過(guò)濾器-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--注冊(cè)SpringMVC框架-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置springMVC位置文件的位置和名稱-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--將前端控制器DispatcherServlet的初始化時(shí)間提前到服務(wù)器啟動(dòng)時(shí)-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--指定攔截什么樣的請(qǐng)求
            例如:http://localhost:8080/demo.action
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--配置包掃描-->
    <context:component-scan base-package="com.zl.controller"/>
    <!--視圖控制器,需要搭配注解驅(qū)動(dòng)使用-->
    <mvc:view-controller path="/" view-name="index"/>
    <!--專門處理ajax請(qǐng)求,ajax請(qǐng)求不需要視圖解析器InternalResourceViewResolver-->
    <!--但是需要添加注解驅(qū)動(dòng),專門用來(lái)解析@ResponseBody注解的-->
    <!--注入date類型時(shí),需要使用@DateTimeFormat注解,也要搭配這個(gè)使用-->
    <mvc:annotation-driven/>
    <!--開(kāi)放對(duì)靜態(tài)資源的訪問(wèn),需要搭配注解驅(qū)動(dòng)使用-->
    <mvc:default-servlet-handler/>

    <!-- 配置Thymeleaf視圖解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 視圖前綴 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 視圖后綴 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

</beans>

報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

(1)HttpMessageConverter,報(bào)文信息轉(zhuǎn)換器,將請(qǐng)求報(bào)文轉(zhuǎn)換為Java對(duì)象,或?qū)ava對(duì)象轉(zhuǎn)換為響應(yīng)報(bào)文。

(2)HttpMessageConverter提供了兩個(gè)注解和兩個(gè)類型:@RequestBody、@ResponseBody、RequestEntity、ResponseEntity!

1.?@RequestBody注解

@RequestBody可以獲取請(qǐng)求體,需要在控制器方法設(shè)置一個(gè)形參使用@RequestBody進(jìn)行標(biāo)識(shí),當(dāng)前請(qǐng)求的請(qǐng)求體就會(huì)為當(dāng)前注解所標(biāo)識(shí)的形參賦值!?

回顧:請(qǐng)求報(bào)文有三個(gè)部分組成:請(qǐng)求頭、請(qǐng)求空行、請(qǐng)求體;對(duì)于Get請(qǐng)求沒(méi)有請(qǐng)求體,只有Post請(qǐng)求才有請(qǐng)求體。因?yàn)镚et請(qǐng)求會(huì)把請(qǐng)求參數(shù)拼接到地址欄,而Post請(qǐng)求則是放到請(qǐng)求體當(dāng)中!

form表單提交數(shù)據(jù)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
</head>
<body>
<form th:action="@{/testRequestBody}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit" value="測(cè)試@RequestBody注解">
</form>

</body>
</html>

controller獲取到請(qǐng)求體

package com.zl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HttpMessageConverterController {
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String requestBody){
        System.out.println("requestBody:"+requestBody);
        return "success";
    }
}

執(zhí)行結(jié)果

注:如果沒(méi)有使用@RequestBody注解拿到的就是一個(gè)null!?

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

2. RequestEntity類型

RequestEntity封裝請(qǐng)求報(bào)文的一種類型,也是需要在控制器方法的形參中設(shè)置該類型的形參,當(dāng)前請(qǐng)求的請(qǐng)求報(bào)文就會(huì)賦值給該形參,可以通過(guò)getHeaders()獲取請(qǐng)求頭信息,通過(guò)getBody()獲取請(qǐng)求體信息。

注:@RequestBody注解只是獲取請(qǐng)求體信息,而RequestEntity可以獲取整個(gè)請(qǐng)求信息!

form表單提交數(shù)據(jù)

<form th:action="@{/testRequestEntity}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit" value="測(cè)試RequestEntity"><br>
</form>

controller獲取到請(qǐng)求體

    @RequestMapping("/testRequestEntity")
    public String testRequestEntity(RequestEntity<String> requestEntity){
        // 獲取請(qǐng)求頭
        System.out.println("requestHeader:"+requestEntity.getHeaders());
        // 獲取請(qǐng)求體
        System.out.println("requestBody:"+requestEntity.getBody());
        return "success";
    }

執(zhí)行結(jié)果

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

3. @RequestBody注解(常用)

@ResponseBody用于標(biāo)識(shí)一個(gè)控制器方法上,可以將該方法的返回值直接作為響應(yīng)報(bào)文的響應(yīng)體響應(yīng)到瀏覽器!?

回顧:以前使用原生的ServletAPI響應(yīng)數(shù)據(jù)到瀏覽器

前端發(fā)出請(qǐng)求

<a th:href="@{/testServletAPI}">使用原生的ServletAPI響應(yīng)數(shù)據(jù)到瀏覽器</a>

controller獲取到請(qǐng)求,相應(yīng)數(shù)據(jù)到瀏覽器

    @RequestMapping("/testServletAPI")
    public void testServletAPI(HttpServletResponse response) throws IOException {
        // 調(diào)用getWriter方法獲取到一個(gè)流
        PrintWriter out = response.getWriter();
        // 響應(yīng)到瀏覽器
        out.println("Hello,Response");

    }

執(zhí)行結(jié)果

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

現(xiàn)在:使用@ResponseBody注解響應(yīng)數(shù)據(jù)到瀏覽器

前端發(fā)出請(qǐng)求

<a th:href="@{/testResponseBody}">使用@RequestBody注解響應(yīng)數(shù)據(jù)到瀏覽器</a>

controller獲取到請(qǐng)求,相應(yīng)數(shù)據(jù)到瀏覽器

注:如果沒(méi)有使用@ResponseBody注解,此時(shí)返回的success就會(huì)被當(dāng)做視圖名稱被前端控制器加上前綴和后綴進(jìn)行進(jìn)行頁(yè)面的跳轉(zhuǎn)。如果加上@ResponseBody注解,此時(shí)返回的值就不會(huì)當(dāng)做視圖名稱,而是當(dāng)前響應(yīng)體!

    @RequestMapping("/testResponseBody")
    @ResponseBody
    public String testRequestBody(){
        return "success..........";
    }

執(zhí)行結(jié)果

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

重點(diǎn):SpringMVC處理json

瀏覽器是只能識(shí)別字符串的,那么假如我們返回的是一個(gè)Java對(duì)象呢?此時(shí)瀏覽器就無(wú)法識(shí)別報(bào)錯(cuò)!怎么解決?轉(zhuǎn)換成Json格式的數(shù)據(jù)!

User對(duì)象

package com.zl.bean;

import java.time.Period;

public class User {
    private String name;
    private Integer age;
    private String sex;

    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public User() {
    }

    public User(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

返回一個(gè)User對(duì)象

    @RequestMapping("/testResponseUser")
    @ResponseBody
    public User testResponseUser(){
        return new User("張三",18,"男");
    }

執(zhí)行結(jié)果:無(wú)法響應(yīng)Java對(duì)象

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

@ResponseBody處理json的步驟?

①導(dǎo)入jackson的依賴

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>

②在SpringMVC的核心配置文件中開(kāi)啟mvc的注解驅(qū)動(dòng)

注解驅(qū)動(dòng)<mvc:annotation-driven/>:專門用來(lái)解析@ResponseBody注解的;此時(shí)在HandlerAdaptor中會(huì)自動(dòng)裝配一個(gè)消息轉(zhuǎn)換器:MappingJackson2HttpMessageConverter,可以將響應(yīng)到瀏覽器的Java對(duì)象轉(zhuǎn)換為Json格式的字符串。

 <mvc:annotation-driven/>

③在處理器方法上使用@ResponseBody注解進(jìn)行標(biāo)識(shí);此時(shí)將Java對(duì)象直接作為控制器方法的返回值返回,就會(huì)自動(dòng)轉(zhuǎn)換為Json格式的字符串

    @RequestMapping("/testResponseUser")
    @ResponseBody
    public User testResponseUser(){
        return new User("張三",18,"男");
    }

執(zhí)行結(jié)果:把Java對(duì)象轉(zhuǎn)換成Json格式的字符串顯示到瀏覽器上

注:Json實(shí)際上有兩種格式,使用大括號(hào){}就是Json對(duì)象、使用方括號(hào)[]就是Json數(shù)組!對(duì)于對(duì)象我們使用 點(diǎn) 的方式進(jìn)行訪問(wèn),對(duì)于數(shù)組我們通過(guò)遍歷的方式進(jìn)行訪問(wèn)。例如:Java對(duì)象、Map集合轉(zhuǎn)化成Json都是對(duì)象的形式存在、List集合轉(zhuǎn)換成Json是以數(shù)組的方式存在。

注:實(shí)際上只增加了一個(gè)jackson的依賴就可以了,因?yàn)樽⒔怛?qū)動(dòng)前面很多地方都用到,例如:視圖控制器、處理靜態(tài)資源,上來(lái)就配置上了;而@Response注解是我們一直要用的。

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

重點(diǎn):SpringMVC處理ajax

使用Vue發(fā)送ajax請(qǐng)求,需要引入兩個(gè)庫(kù):

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

發(fā)送Ajax請(qǐng)求

注:這里ajax發(fā)送請(qǐng)求的導(dǎo)入庫(kù)的時(shí)候:<script></script>不能寫成<script />

<div id="app">
    <a @click="textAxios" th:href="@{/textAxios}">SpringMVC發(fā)送ajax請(qǐng)求</a>
</div>
<!--導(dǎo)入庫(kù),不能直接斜杠結(jié)尾,必須使用</script>才可以-->
<script type="text/javascript" th:src="@{/static/js/vue.js}" ></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}" ></script>
<!--編寫-->
<script type="text/javascript">
    new Vue({
        // 綁定容器
        el:"#app",
        // 觸發(fā)事件
        methods:{
            // 發(fā)送ajax請(qǐng)求
            textAxios:function(event){
                // ajax請(qǐng)求
                axios({
                    method:"post",
                    url:event.target.href,
                    params:{
                        username:"admin",
                        password:"123"
                    }
                }).then(function (response){ // 就相當(dāng)于使用ajax的回調(diào)函數(shù)
                    alert(response.data);
                });
                // 取消超鏈接的默認(rèn)行為
                event.preventDefault();
            }
        }
    });
</script>

控制器方法

    @RequestMapping("/textAxios")
    @ResponseBody
    public String testAjax(String username,String password){
        System.out.println("username:"+username+",password:"+password);
        return username+","+password;
    }

執(zhí)行結(jié)果:成功拿到ajax發(fā)送的數(shù)據(jù),并且不會(huì)頁(yè)面跳轉(zhuǎn)

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

重點(diǎn):@RestController注解

@RestController注解是springMVC提供的一個(gè)復(fù)合注解,標(biāo)識(shí)在控制器的類上,就相當(dāng)于為類添加了@Controller注解,并且為其中的每個(gè)方法添加了@ResponseBody注解。

4.?ResponseEntity(實(shí)現(xiàn)文件的上傳下載)

ResponseEntity用于控制器方法的返回值類型,該控制器方法的返回值就是響應(yīng)到瀏覽器的響應(yīng)報(bào)文 !

注:使用ResponseEntity實(shí)現(xiàn)下載文件的功能!

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

文件下載

前端發(fā)出請(qǐng)求

<!--文件下載-->
<a th:href="@{/testDown}">下載1.jpg</a>

后端處理

第一步:創(chuàng)建一個(gè)方法,方法的返回值就是ResponseEntity類型,方法的參數(shù)就是HttpSession對(duì)象。

第二步:根據(jù)session對(duì)象獲取到上下文對(duì)象applocation對(duì)象,然后調(diào)用application對(duì)象的getRealPath方法,獲取到在該項(xiàng)目中的文件的真實(shí)路徑。

第三步:根據(jù)這個(gè)真實(shí)路徑創(chuàng)建一個(gè)IO輸入流去讀取數(shù)據(jù);并創(chuàng)建一個(gè)byte數(shù)組,參數(shù)是is.avaliavle()表示獲取該文件的所有字節(jié),這樣就不要循環(huán)了;調(diào)用read方法進(jìn)行讀取,返回的是讀取到字節(jié)的數(shù)量,將流讀取到字節(jié)數(shù)組中去。

第四步:創(chuàng)建響應(yīng)頭信息HttpHeaders對(duì)象,并調(diào)用add方法設(shè)置下載的方式以及文件的名字

第五步:設(shè)置響應(yīng)狀態(tài)碼。

第六步:創(chuàng)建ResponseEntity對(duì)象,參數(shù)有三個(gè):響應(yīng)體、響應(yīng)頭、狀態(tài)碼。

第七步:關(guān)閉IO流,返回ResponseEntity對(duì)象。

@Controller
public class FileUpAndDownController {
    @RequestMapping("/testDown")
    // 方法的返回值就是ResponseEntity類型
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //獲取ServletContext上下文對(duì)象
        ServletContext application = session.getServletContext();
        //獲取服務(wù)器中文件的真實(shí)路徑
        String realPath = application.getRealPath("/static/img/1.jpg");
        //創(chuàng)建輸入流
        InputStream is = new FileInputStream(realPath);
        //創(chuàng)建字節(jié)數(shù)組
        byte[] bytes = new byte[is.available()];
        //將流讀到字節(jié)數(shù)組中
        is.read(bytes);
        //創(chuàng)建HttpHeaders對(duì)象設(shè)置響應(yīng)頭信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //設(shè)置要下載方式以及下載文件的名字(固定的)
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //設(shè)置響應(yīng)狀態(tài)碼
        HttpStatus statusCode = HttpStatus.OK;
        //創(chuàng)建ResponseEntity對(duì)象(響應(yīng)體、響應(yīng)頭、狀態(tài)碼)
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //關(guān)閉輸入流
        is.close();
        return responseEntity;
    }
}

執(zhí)行結(jié)果

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

文件上傳

(1)文件上傳要求form表單的請(qǐng)求方式必須為post,并且添加屬性enctype="multipart/form-data"。默認(rèn)這個(gè)值等于enctype="application/x-www-form-urlencoded",表示key=value的方式傳輸;設(shè)置成enctype="multipart/form-data",此時(shí)就是以二進(jìn)制的方式傳輸。

(2)SpringMVC中將上傳的文件封裝到MultipartFile對(duì)象中,通過(guò)此對(duì)象可以獲取文件相關(guān)信息。

前端發(fā)出請(qǐng)求

<!--文件上傳-->
<form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
    頭像:<input type="file" name="photo"><br>
    <input type="submit" value="上傳">
</form>

a>添加依賴

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

b>在springmvc.xml的配置文件中添加配置

注:SpringMVC是根據(jù)id獲取這個(gè)Bean的,并且這個(gè)id必須叫multipartResolver!實(shí)際上我們需要的是MultipartResolver對(duì)象,但它是一個(gè)接口,所以就使用了它的實(shí)現(xiàn)類CommonsMultipartResolver對(duì)象。

<!--必須通過(guò)文件解析器的解析才能將文件轉(zhuǎn)換為MultipartFile對(duì)象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

c>控制器方法

注:把上傳的對(duì)象封裝到MultipartFile對(duì)象當(dāng)中去!

第一步:通過(guò)前面的CommonsMultipartResolver把傳過(guò)來(lái)的photo轉(zhuǎn)換成MultipartFile對(duì)象。

第二步:調(diào)用getOriginalFilename獲取上傳的文件名,例如:1.jpg。

第三步:解決文件重名問(wèn)題,首先通過(guò)截取,獲得文件的后綴;然后調(diào)用UUID.randomUUID().toString()方法獲取一個(gè)32位的UUID,與得到的后綴名拼接一起。

第四步:通過(guò)session對(duì)象獲取到application對(duì)象,調(diào)用方法獲取一個(gè)目錄的路徑;如果還要判斷這個(gè)目錄是否存在,如果不存在就創(chuàng)建。

第五步:拼接一個(gè)新的目錄:目錄路徑+分隔符+文件名。

第六步:調(diào)用transferTo方法實(shí)現(xiàn)上傳功能。

    @RequestMapping("/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //獲取上傳的文件的文件名
        String fileName = photo.getOriginalFilename();
        //處理文件重名問(wèn)題
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        fileName = UUID.randomUUID().toString() + hzName;
        //獲取服務(wù)器中photo目錄的路徑
        ServletContext application = session.getServletContext();
        String photoPath = application.getRealPath("photo"); // 設(shè)置上傳的位置,就是webapp下的photo
        // 創(chuàng)建目錄(沒(méi)有就創(chuàng)建)
        File file = new File(photoPath);
        if(!file.exists()){
            file.mkdir();
        }
        // 真正的路徑:目錄+分隔符+文件名
        String finalPath = photoPath + File.separator + fileName;
        //實(shí)現(xiàn)上傳功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

執(zhí)行結(jié)果

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

圖書推薦《Spring Cloud 微服務(wù)快速上手》

參與方式:

本次送書 2?本!?
活動(dòng)時(shí)間:截止到 2023-06-15?00:00:00。

抽獎(jiǎng)方式:利用程序進(jìn)行抽獎(jiǎng)。

參與方式:關(guān)注博主(只限粉絲福利哦)、點(diǎn)贊、收藏,評(píng)論區(qū)隨機(jī)抽取,最多三條評(píng)論!

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter

其它圖書詳情了解:IT BOOK 多得?

【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-480706.html

到了這里,關(guān)于【SpringMVC】| 報(bào)文信息轉(zhuǎn)換器HttpMessageConverter的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在線PDF格式轉(zhuǎn)換器推薦,小圓象PDF轉(zhuǎn)換器滿足您的辦公需求

    在線PDF格式轉(zhuǎn)換器推薦,小圓象PDF轉(zhuǎn)換器滿足您的辦公需求

    作為上班族,我們都知道在辦公應(yīng)用中經(jīng)常使用PDF文件。PDF具有較高的內(nèi)容安全性,并且可以在多種設(shè)備上打開(kāi)和瀏覽而不會(huì)出現(xiàn)格式混亂的問(wèn)題。然而,PDF文件的一個(gè)短板是其不易編輯。通常情況下,我們需要將PDF文件轉(zhuǎn)換為Word文檔,以便提取其中的文字內(nèi)容或進(jìn)行格式編

    2024年02月11日
    瀏覽(92)
  • 【圖像增強(qiáng)器和轉(zhuǎn)換器】Winxvideo AIAI 驅(qū)動(dòng)的視頻/圖像增強(qiáng)器和轉(zhuǎn)換器軟件。

    【圖像增強(qiáng)器和轉(zhuǎn)換器】Winxvideo AIAI 驅(qū)動(dòng)的視頻/圖像增強(qiáng)器和轉(zhuǎn)換器軟件。

    Winxvideo AI,以前稱為WinX HD Video Converter Deluxe,是一款利用尖端深度學(xué)習(xí)技術(shù)的高級(jí)軟件工具包。它提供了一套全面的工具,用于放大、穩(wěn)定、轉(zhuǎn)換、壓縮、錄制和編輯 4K/8K/HDR 視頻。 AI 驅(qū)動(dòng)的功能通過(guò)全面的 GPU 加速確保影院級(jí)質(zhì)量。 Winxvideo AI 提供了一套強(qiáng)大且易于使用的視

    2024年02月20日
    瀏覽(40)
  • 電源轉(zhuǎn)換器類型

    1根據(jù)轉(zhuǎn)換的形式分類,可分為: AC-AC(交流-交流)轉(zhuǎn)換器:如交流電源變壓器、變頻器等。 AC-DC(交流-直流)轉(zhuǎn)換器:整流器。 DC-DC(直流-直流)轉(zhuǎn)換器。 DC-AC(直流-交流)轉(zhuǎn)換器:逆變器。 2 根據(jù)轉(zhuǎn)換的方法分類,可分為: 線性電源:使用工作在線性區(qū)的功率器件調(diào)整

    2024年02月08日
    瀏覽(25)
  • RabbitMQ消息轉(zhuǎn)換器

    RabbitMQ消息轉(zhuǎn)換器

    在SpringAMQP的發(fā)送方法中,發(fā)送消息和接受消息的類型都是Object,也就是說(shuō),我們可以發(fā)送任意對(duì)象類型的消息, SpringAMQP都會(huì)幫我們把發(fā)送的消息序列化為字節(jié)后再進(jìn)行發(fā)送 。下面,我們可以演示一下: 假設(shè)我們現(xiàn)在有個(gè)User類,如下(切記一定要實(shí)現(xiàn)Serializable接口,才能被

    2024年02月05日
    瀏覽(97)
  • ip轉(zhuǎn)換器哪個(gè)好用 ip地址切換器有哪些

    在互聯(lián)網(wǎng)時(shí)代,IP轉(zhuǎn)換器成為了實(shí)現(xiàn)高效工作的常見(jiàn)工具。而如今,市面上涌現(xiàn)出了眾多的IP轉(zhuǎn)換器軟件,使得用戶在選擇時(shí)感到困惑。本文將介紹一種深度IP轉(zhuǎn)換器軟件,探討其特點(diǎn)和優(yōu)勢(shì),以及與其他軟件相比的差異,幫助讀者在眾多產(chǎn)品中作出明智的選擇。 強(qiáng)大的功能和

    2024年02月13日
    瀏覽(19)
  • 電腦視頻轉(zhuǎn)換成mp4格式,視頻格式轉(zhuǎn)換器轉(zhuǎn)換

    電腦視頻轉(zhuǎn)換成mp4格式,視頻格式轉(zhuǎn)換器轉(zhuǎn)換

    怎么把 電腦視頻轉(zhuǎn)換成mp4格式 ? 使用視頻轉(zhuǎn)換器,可以轉(zhuǎn)換來(lái)自各種設(shè)備的音視頻格式,包括相機(jī)、手機(jī)、視頻播放器、電視、平板電腦等。因此,音視頻愛(ài)好者都可以使用它在各種設(shè)備上播放或在社交平臺(tái)上分享。 主要人群及作用: 音樂(lè)愛(ài)好者:如果酷愛(ài)音樂(lè),那么視

    2023年04月13日
    瀏覽(95)
  • Rabbitmq的消息轉(zhuǎn)換器

    Rabbitmq的消息轉(zhuǎn)換器

    Spring會(huì)把你發(fā)送的消息序列化為字節(jié)發(fā)送給MQ,接收消息的時(shí)候,還會(huì)把字節(jié)反序列化為Java對(duì)象 ,只不過(guò),默認(rèn)情況下Spring采用的序列化方式是JDK序列化。眾所周知,JDK序列化存在下列問(wèn)題: 數(shù)據(jù)體積過(guò)大 有安全漏洞 可讀性差 發(fā)送一個(gè)Map對(duì)象 ? 發(fā)送消息后查看控制臺(tái) ? 顯

    2024年02月11日
    瀏覽(25)
  • WPF Converter轉(zhuǎn)換器

    在 WPF 中,Converter 通常用于在數(shù)據(jù)綁定過(guò)程中執(zhí)行值的轉(zhuǎn)換。你可以創(chuàng)建自定義的 Converter 類來(lái)實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換邏輯,然后在 XAML 中使用這個(gè)轉(zhuǎn)換器。 創(chuàng)建一個(gè)繼承自 ValueConverter 接口的轉(zhuǎn)換器類,實(shí)現(xiàn) Convert 和 ConvertBack 方法。 在 XAML 中,聲明 Converter,并將它應(yīng)用到數(shù)據(jù)綁定

    2024年01月21日
    瀏覽(19)
  • WPF多值轉(zhuǎn)換器

    WPF多值轉(zhuǎn)換器

    背景:實(shí)現(xiàn)Slider拖動(dòng)可以調(diào)整rgb 單轉(zhuǎn)換器:WPF中數(shù)據(jù)綁定轉(zhuǎn)換器Converter-CSDN博客 在View中: ? ? ? ? -- Fill中綁定的資源是Window.Resources中引入進(jìn)來(lái)的轉(zhuǎn)換器key ? ? ? ? -- 轉(zhuǎn)換器返回的是一個(gè)SolidBrush,其實(shí)就是相當(dāng)于在這個(gè)地方寫個(gè)SolidBrush ? ? ? ? -- 這里綁定的是Slider的值,

    2024年01月23日
    瀏覽(92)
  • 【wpf】轉(zhuǎn)換器 Converter

    【wpf】轉(zhuǎn)換器 Converter

    今天積攢了一個(gè)轉(zhuǎn)換器的用法,分享給各位。 我們經(jīng)常會(huì)有這種需求: 某些控件有時(shí)需要顯示,有時(shí)需要隱藏,比如: 那,我就想通過(guò)一個(gè)bool變量和是否顯示綁定。 但是我們知道,是否顯示,這個(gè)屬性? Visibility 它并不是一個(gè)bool類型無(wú)法直接綁定,此時(shí)我們需要一個(gè)轉(zhuǎn)換

    2023年04月26日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包