接口请求响应码415报错信息UNSUPPORTED_MEDIA_TYPE问题记录

发布时间 2023-12-26 22:48:47作者: C紫枫

场景描述

开发了一个Post类型的接口,在本地用postman测试是没有问题。前端调用返回415 UNSUPPORTED_MEDIA_TYPE。而415 Unsupported Media Type 是一种HTTP 协议的错误状态代码,表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求后面定位问题发现,后端接口请求参数使用@RequestBody注解,该注解要求请求体的类型是application/json。前端的请求体类型是application/x-www-from-urlencoded。发送的请求体类型与后端要求的不一致导致报错。

请求体有哪些类型?


我们从postman工具上可以看到多种请求体类型,下面对常用的请求体进行相关说明

表单数据

例子

POST /api/formdata HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=johndoe&password=pass123

SpringBoot注解接收参数

@PostMapping("/api/formdata")
public String handleFormData(@RequestParam String username, @RequestParam String password) {
    // 处理请求
}

// 如果想接收所有表单参数,即封装成一个实体类,可以采取@ModelAttribute
    @PostMapping("/api/submitForm")
    public String handleFormSubmission(@ModelAttribute YourRequestObject requestObject) {
        // 处理请求
        // requestObject 将包含所有请求参数的值
        return "successPage";
    }

JSON数据

例子

POST /api/jsondata HTTP/1.1
Content-Type: application/json

{
    "username": "johndoe",
    "password": "pass123"
}

Spring Boot注解

@PostMapping("/api/jsondata")
public String handleJsonData(@RequestBody User user) {
    // 处理请求
}

XML数据

例子

POST /api/xmldata HTTP/1.1
Content-Type: application/xml

<user>
    <username>johndoe</username>
    <password>pass123</password>
</user>

Spring Boot注解

@PostMapping("/api/xmldata")
public String handleXmlData(@RequestBody User user) {
    // 处理请求
}

文件上传

例子

POST /api/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=--------------------------123456789012345678901234

(multipart data)

Spring Boot注解

@PostMapping("/api/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    // 处理文件上传
}