首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@PostMapping无效。HTTP 415不支持的MediaType错误

@PostMapping无效。HTTP 415不支持的MediaType错误
EN

Stack Overflow用户
提问于 2018-06-07 10:37:00
回答 2查看 6.2K关注 0票数 0

我创建了一个@RestController并映射了一个@PostMapping请求。

我将内容类型作为"application/ JSON“传递给控制器,在控制器中读取带有@RequestBody注释的JSON,并将其映射到Model类对象。

@RestController:

代码语言:javascript
复制
@PostMapping("/saveUser")
public UserDetails save(@RequestBody UserDetails user) {
    System.out.println("from json input : "+user.idVal+" : "+user.getName());
    service.save(user);
    JSONObject jsn = new JSONObject();
    jsn.put("Result", user.getName());
    return user;
}

HTTP请求

代码语言:javascript
复制
{
"idVal":"asdadasd",
"name":"TestUser"
}

模型类

代码语言:javascript
复制
import javax.persistence.Entity;
javax.persistence.Id;

@Entity
public class UserDetails {

    @Id
    public String idVal;
    public String name;

    public String getId() {
        return idVal;
    }
    public void setId(String id) {
        this.idVal = id;
    }

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

我用邮递员做客户端。

以下是我遇到的错误:

代码语言:javascript
复制
HTTP Status 415 – Unsupported Media Type
Type Status Report

Description The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.

Apache Tomcat/8.5.31

我尝试了以下几点:

代码语言:javascript
复制
@PostMapping(value="/saveUser", consumes=MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE)
public UserDetails save(@RequestBody UserDetails user) {
    System.out.println("from json input : "+user.idVal+" : "+user.getName());
    service.save(user);
    JSONObject jsn = new JSONObject();
    jsn.put("Result", user.getName());
    return user;
}

编辑:

以下是邮递员的完整要求:

代码语言:javascript
复制
 POST /Zcrud/saveUser HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: fa4cfc76-d60c-f8dd-53b9-fd8b0b27ef7d

{
    "idVal":"asdadasd",
    "name":"TestUser"
}

响应:

代码语言:javascript
复制
<!doctype html><html lang="en"><head><title>HTTP Status 415 – Unsupported Media Type</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 415 – Unsupported Media Type</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.</p><hr class="line" /><h3>Apache Tomcat/8.5.31</h3></body></html>
EN

Stack Overflow用户

发布于 2018-06-07 10:49:24

您在请求中将application/jsonPostman传递到您的应用程序。但是您的服务器不了解application/json是什么。

因此,您也必须在服务器中定义请求的类型,以及它将产生的响应类型。

为此,请更改@RestController@PostMapping,如下所示

代码语言:javascript
复制
@PostMapping(value ="/saveUser", consumes = MediaType.APPLICATION_JSON_VALUE,
        produces = MediaType.APPLICATION_JSON_VALUE)
public UserDetails save(@RequestBody UserDetails user) {
   System.out.println("from json input : "+user.idVal+" : "+user.getName());
   service.save(user);
   JSONObject jsn = new JSONObject();
   jsn.put("Result", user.getName());
   return user;
}

希望能有所帮助!)

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50739123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档