【发布时间】:2018-11-17 05:52:15
【问题描述】:
我创建了一个@RestController 并映射了一个@PostMapping 请求。
我将 Content Type 作为“application/json”传递给控制器,在该控制器中,我正在读取带有 @RequestBody 注释的 JSON,并将其映射到我的 Model 类对象。
@RestController:
@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 请求
{
"idVal":"asdadasd",
"name":"TestUser"
}
模型类
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;
}
}
我使用 Postman 作为 REST 客户端。
以下是我得到的错误:
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
我试过如下:
@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;
}
编辑:
以下是完整的邮递员请求:
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"
}
回复:
<!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>
【问题讨论】:
-
你的 pom
<dependencies> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.8.5</version> </dependency> </dependencies>Reference中定义了这个依赖 -
1) 为什么要在控制器中创建无用的
JSONObject? 2) 请发布完整的 HTTP 请求日志。
标签: java spring-mvc