java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring MVC REST响应

Spring MVC   文件、cookies的接收 与REST响应详解

作者:想进大厂的小王

在SpringMVC中,使用@RequestPart注解可接收文件并处理多部分请求,同时可以通过@CookieValue和HttpServletResponse来获取和设置Cookies,本文介绍Spring MVC   文件、cookies的接收 与REST响应,感兴趣的朋友跟随小编一起看看吧

一、接受文件

在 Spring MVC 中,可以使用 @RequestPart 注解来接收文件。这个注解常用于处理复杂的请求,如同时发送 JSON 数据和文件。@RequestPart 非常适用于多部分请求(multipart requests),这在单个请求中同时发送文件和数据。

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
    @PostMapping("/upload")
    public String handleFileUpload(
            @RequestPart("file") MultipartFile file,
            @RequestPart("metadata") Metadata metadata) {
        try {
            // 处理文件,例如保存到服务器
            file.transferTo(new File("/path/to/destination/" + file.getOriginalFilename()));
            // 还可以处理元数据
            System.out.println("Image description: " + metadata.getDescription());
            return "File uploaded successfully: " + file.getOriginalFilename();
        } catch (Exception e) {
            return "Error during file upload: " + e.getMessage();
        }
    }
    static class Metadata {
        private String description;
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    }
}

HTML 表单

在前端,您可以创建一个表单来发送文件和 JSON 数据。

<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="hidden" name="metadata" value='{"description":"A sample image"}'>
    <button type="submit">Upload</button>
</form>

二、Cookies 与 Session 

CookiesSession 是用于存储信息、跟踪用户状态和进行用户身份验证的两个非常重要的概念.

Cookies

Cookies 是小的数据片段,由服务器发送到用户的浏览器,并由浏览器存储。每当同一用户回到该服务器时,浏览器会将这些数据片段发送回服务器。Cookies 常用于保存用户偏好、购物车内容、身份验证令牌等。

特点

Session

Session 是另一种在服务器上跟踪用户状态的方法。服务器为每个用户创建一个 Session 对象,通常保存在服务器的内存中。每个 Session 都有一个唯一的标识符(通常称为 Session ID),这个标识符会被存储在 Cookie 中(也可通过 URL 重写等方式传递),以便在后续请求中识别用户。

特点

三、Spring MVC 与 Cookie 

1)获取 Cookie

使用 @CookieValue 注解,可以直接在控制器的方法参数中捕获 Cookie 值。例如,如果想获取名为 sessionId 的 Cookie:

import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CookieController {
    @GetMapping("/get-cookie")
    public String readCookie(@CookieValue(name = "sessionId", defaultValue = "No Session") String sessionId) {
        return "Session ID: " + sessionId;
    }
}

在这个例子中,@CookieValue 注解用来指定我们想获取的 Cookie 名称。你也可以设置 defaultValue,这样如果指定的 Cookie 不存在,就会使用这个默认值

2) 设置 Cookie

要在 Spring MVC 中设置 Cookie,需要创建一个 Cookie 对象,并通过 HttpServletResponse 添加到响应中。这里是一个示例方法,展示如何创建和发送一个新的 Cookie:

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CookieController {
    @GetMapping("/set-cookie")
    public String setCookie(HttpServletResponse response) {
        Cookie cookie = new Cookie("sessionId", "123456789");
        cookie.setMaxAge(7 * 24 * 60 * 60); // 设置 Cookie 有效期为一周
        cookie.setHttpOnly(true); // 增强安全性,防止客户端脚本访问
        cookie.setPath("/"); // 设置 Cookie 适用的路径
        response.addCookie(cookie);
        return "Cookie set";
    }
}

四、获取header 

使用 @RequestHeader 注解轻松地从 HTTP 请求中提取 HTTP 头信息。这个注解可以绑定方法参数到特定的请求头,从而可以在控制器中直接使用这些头信息。可以通过将 @RequestHeader 添加到控制器方法的参数上来获取指定的请求头值。例如,如果你想获取请求中的 User-AgentAccept-Language 头信息,可以这样做:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HeaderController {
    @GetMapping("/get-headers")
    public String getHeaders(
            @RequestHeader("User-Agent") String userAgent,
            @RequestHeader("Accept-Language") String language) {
        return "User-Agent: " + userAgent + "\nAccept-Language: " + language;
    }
}

可选头信息

并非所有头信息在每个请求中都是必需的。你可以使用 required=false 属性来标记一个头信息为可选,这样即使没有提供这个头信息,应用也不会报错:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HeaderController {
    @GetMapping("/optional-header")
    public String getOptionalHeader(@RequestHeader(value = "X-Optional-Header", required = false) String optionalHeader) {
        return optionalHeader != null ? "Optional Header: " + optionalHeader : "No Optional Header Provided";
    }
}

到此这篇关于Spring MVC 文件、cookies的接收 ,REST响应的文章就介绍到这了,更多相关Spring MVC REST响应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文